您的位置:首页 > 运维架构 > Shell

shell脚本之变量、变量类型、条件测试、算术运算、及特殊变量

2014-07-24 22:03 696 查看
bash脚本编程之变量、变量类型、条件测试、算术运算、及特殊变量

一、学习目的

1、了解bash脚本的变量类型及变量的使用

2、了解bash中条件测试的种类及如何在bash中实现条件的判断
3、学会在bash中做算术运算
4、了解特殊变量的使用

二、学习内容
1)、 ①、bash的变量类型: 环境变量 、本地变量、局部变量、位置变量、特殊变量

环境变量: export VALUENAME = VALUE 作用领域是当前的shell进程及其子进程
本地变量: VALUENAME= VALUE 作用领域为整个bash的进程
局部变量;local VALUENAME= VALUE 作用领域是当前的代码段

位置变量:$1 、$2、$3、$4... 指引用脚本后面的第几个参数

特殊变量:
$?:上一个命令执行状态返回值

$#:查询参数的个数
$*:显示参数的列表

$@:显示参数的列表

②、 如何引用变量:
${VALUENAME} 花括号大多数可以省略
③、变量名称的命名规则:
#只能包含字母,数字,下划线,并且不能以数字开头
#不应该跟系统中的已有的环境变量名重名
#尽量做到见名思义
-----------------------------------------------------------------------------
2)、①、bash中常用的条件测试有三种: 整数测试、字符串测试、文件测试
整数测试:
-eq : 测试两个整数是否相等 [ $A -eq $ B ] ;相等为真
-ne : 测试两个整数是否不相等 ;不等为真
-gt :测试一个整数是否大于另一个整数;大于为真
-lt: 测试一个整数是否小于另一个整数;小于为真
-ge:测试一个整数是否大于等于另一个整数;大于等于为真
-le: 测试一个整数是否小于等于另外一个整数;小于等于为真

字符串测试:
str1 = str2 : 当两个字串相等时为真str1
!= str2: 当两个字串不等时为真
-n str1: 当字符串的长度大于0时为真
-z str1: 当字符串的长度为0时为真
-n str: 当字符串为非空时为真

文件测试:

-e FILE :测试文件是否存在,存在为真 [ -e /etc/passwd ]

-f FILE : 测试文件是否为普通文件, 为普通文件为真

-d FILE : 测试指定的路径是否为目录 ;为目录为真

-r FILE : 测试当前的用户对指定的文件是否有读取权限

-x FILE : 测试当前的用户对指定的文件是否有执行权限
-w FILE : 测试当前的用户对指定的文件是否有写权限

②、条件测试的表达式:
[ expression ]
[[ expression ]]

test expression

③、条件判断
-- 关于命令间的逻辑关系的条件判断:
逻辑与: expression1 && expression2
第一个条件为假,则不执行第二个条件;第一个条件为真则判断第二个条件,结果为第二个条件。
逻辑或: expression1 || expression2
第一个条件为真则不执行第二个条件

第一个条件为假则继续执行第二个条件

--关于if的控制结构的条件判断:
单分支: if 判断条件 ;then
statement1
....

fi
双分支: if 判断条件 ;then

statement1

statement2

.....

else

statement1
...

fi

双分支: if 判断条件1 ;then
statement1
...
elif 判断条件2 ; then
statement1
....
elif 判断条件3 ; then
statement1
...
....

fi

---------------------------------------------------------------------------
3)、 在shell中如何进行算术运算: 如有两个变量:A=3 ,B=4

let 算术运算表达式
let C= $A + $B
算术运算表达式]

C=[$A+$B]

((算术运算表达式))
C=(($A +$B))

三、巩固练习,完成以下的脚本
练习:写一个脚本,完成以下任务

1、添加5个用户, user1,..., user5;如果用户存在则提示“username have existed”,否则 添加用户并显示“username have added” ;
2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息;
3、每个用户添加完成后,都要显示用户某某已经成功添加;








练习:如果/etc/passwd文件的行数大于100,就显示好大的文件;








练习:如果用户user8不存在,就添加用户user6








练习,写一个脚本,完成以下要求:
给定一个用户:
1、如果其UID为0,就显示此为管理员;
2、否则,就显示其为普通用户;














练习:写一个脚本
判断当前系统上是否有用户的默认shell为bash;
如果有,就显示有多少个这类用户;否则,就显示没有这类用户;







练习:写一个脚本
给定一个用户,判断其UID与GID是否一样
如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”。







练习:写一个脚本

判定命令历史中历史命令的总条目是否大于1000;如果大于,则显示“Some command will gone.”;否则显示“OK”。







练习:写一个脚本
给定一个文件/etc/passwd:
如果是一个普通文件,就显示之;
如果是一个目录,亦显示之;
否则,此为无法识别之文件;













练习:写一脚本
能接受一个参数(文件路径)
判定:此参数如果是一个存在的文件,就显示“OK.”;否则就显示"No such file."







练习:写一个脚本
给脚本传递两个参数(整数);
显示此两者之和,之乘积;







本文出自 “天道酬勤” 博客,请务必保留此出处http://luzhi1024.blog.51cto.com/8845546/1529859
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: