文件测试判断条件
-e FILE:测试文件是否存在 -f FILE:测试文件是否为普通文件 -d FILE:测试指定路径是否为目录 -r FILE:测试当前用户对指定文件是否有读权限 -w FILE:测试当前用户对指定文件是否有写权限 -x FILE:测试当前用户对指定文件是否有执行权限 Example: [ -e /etc/passwd ] [ -x /etc/shadow ]
多分支if语句
if 判断条件1;then statement1 ... elif 判断条件2;then statement2 ... elif 判断条件3;then statement3 ... else statement4 ... fi Example: #!/bin/bash FILES=/etc/ if [ ! -e $FILES ];then echo no such file elif [ -f $FILES ];then echo file elif [ -d $FILES ];then echo "$FILES is directory" else echo unknow fi 首先判断/etc/是否存在,如果不存在则显示no such file,然后退出脚本;如果/etc/存在,第一个判断为假,继续判断/etc/是否为普通文件,是则显示file,退出脚本;不是继续判断/etc/是否为目录,是显示一句话然后退出,所有判断都不对,最后则执行else,打印unknow
测试脚本是否有语法错误:
[root@localhost ~]# bash -n xxxx.sh [root@localhost ~]# bash -x xxxx.sh #单步执行
位置参数的应用
#!/bin/bash if [ -e $1 ];then #位置参数不用在脚本中设置,执行脚本时添加位置参数 echo file else echo no such file fi [root@localhost script]# bash file2.sh /etc/fstab #指定/etc/fstab这个位置参数
特殊变量
$?:上一个命令的执行状态返回值 $#:参数的个数 $*:参数列表 $@:参数列表 Example1: #!/bin/bash if [ $# -lt 1 ];then echo Please Input Parameters elif [ -e $1 ];then echo "$1 exist" else echo "$1 not exist" fi 如果参数个数小于1,打印一句话后退出脚本;如果参数个数不小于1,第一个判断条件不满足,判断第二个条件,文件是否存在,存在打印一句后退出;上面两个条件都不满足执行最后一个语句 Example2: #!/bin/bash if [ $# -lt 2 ];then echo "Not enough parameters" exit 6 fi echo "The sum is: $[$1+$2]" echo "The product is: $[$1*$2]" 当参数个数小于2,打印一句话退出整个脚本,返回一个状态码为6;当不满足判断条件,则打印两个参数的和是多少,乘积是多少
位置参数之shift
shift用于位置参数之后,如有参数$1、$2、$3;在$1之后使用shift,则使用完$1这个位置参数之后,踢掉$1参数,$2变为$1,$3变为$2;shift后面可以跟数字,可以踢掉多个参数 如:shift NUMBER
字符串测试
==(=):测试两边字符串是否相等,相等为真,不等为假;==(=)两端要有空格,否则系统会认为是变量赋值 !=:测试两边字符串是否不等,不等为真,相等为假 >:测试大于 <:测试小于 -n string:测试指定字符串是否为不空,不空则真,空则假 [ -n "$X" ] -z string:测试指定字符串是否为空,空则真,不空则假 Example: #!/bin/bash if ! id $1 &>/dev/null;then echo no such user exit 10 fi if [ `id -n -u $1` == `id -n -g $1` ];then #id -n -u user,只显示user用户的用户名,不显示uid;-n需要配合-u、-g、-G使用 echo "same" else echo "different" fi 先判断用户是否存在,如果不存在,则打印一句话后退出脚本,如果用户存在,继续往下判断;判断==两边字符串是否相同