shell脚本中的逻辑判断,文件目录属性判断,if特殊用法,case判断
温馨提示:这篇文章已超过850天没有更新,请注意相关的内容是否还可用!
Shell脚本中的逻辑判断
格式1:if 条件 ; then 语句; fi
#!/bin/bash # by ahao a=10 if [ $a -gt 3 ];then echo OK fi 注释:如果a大于3则输出OK
格式2:if 条件; then 语句; else 语句; fi
#!/bin/bash # by ahao a=2 if [ $a -gt 3 ];then echo OK else echo no fi 注释:如果a大于3则输出OK,否则输出no
格式3:if …; then … ;elif …; then …; else …; fi
#!/bin/bash # by ahao a=4 if [ $a -gt 5 ];then echo OK elif [ $a -lt 7 ];then echo " a>5 && a<7" else echo no fi
逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格
可以使用 && || 结合多个条件
if [ $a -gt 5 ] && [ $a -lt 10 ]; then
if [ $b -gt 5 ] || [ $b -lt 3 ]; then
文件目录属性判断
1、 [ -f file ]判断是否是普通文件,且存在
用法: #!/bin/bash f=/tmp/ahao.txt if [ -f $f ];then rm -rf $f else touch $f fi
2、[ -d file ] 判断是否是目录,且存在
用法: #!/bin/bash f="/tmp/ahao" if [ -d $f ] then echo $f exist else touch $f fi
3、 [ -e file ] 判断文件或目录是否存在
#!/bin/bash f="/tmp/ahao" if [ -e $f ] then echo $f exist else touch $f fi
4、 [ -r file ] 判断文件是否可读
#!/bin/bash f="/tmp/ahao" if [ -r $f ] then echo $f readable fi
5、 [ -w file ] 判断文件是否可写
#!/bin/bash f="/tmp/ahao" if [ -w $f ] then echo $f writeable fi
6、 [ -x file ] 判断文件是否可执行
用法:#!/bin/bash f="/tmp/ahao" if [ -x $f ];then echo $f exeable fi
if特殊用法
if [ -z "$a" ] 这个表示当变量a的值为空时则输入error则退出
#!/bin/bash n=`wc -l /tmp/ahao` if [ -z "$n"];then echo error exit elif [ $n -gt 100 ] then echo abga fi 解析: [root@ahao01 shell]# sh -x if5.sh ++ wc -l /tmp/ahao wc: /tmp/ahao: No such file or directory + n= + '[' -z ']' + echo error error + exit
if [ -n "$a" ] 表示当变量a的值不为空则输出信息,否则输出b is no
[root@ahao01 shell]# vi if6.sh #!/bin/bash if [ -n "$b" ];then echo $b else echo b is no fi 执行过程 [root@ahao01 shell]# sh -x if6.sh + '[' -n '' ']' + echo b is no b is no
可以吧一条命令作为判断语句,如下
#!/bin/bash if grep -q "mysql" /etc/passwd;then echo "cunzai" else echo "bucunzai" fi ps :grep -q 匹配一个字符串是否存在,存在则不显示,继续执行下一步
判断一个文件里面是否不存在
#!/bin/bash if [ ! -e /etc/passwd ];then echo "bucunzai" else echo "cunzai" fi
if (($a<1)); then …等同于 if [ $a -lt 1 ]; then…
[ ] 中不能使用<,>,==,!=,>=,<=这样的符号
case判断-ksi(上)
case判断脚本格式
格式 case 变量名 in value1) command ;; value2) command ;; value3) command ;; *) command ;; esac 在case程序中,可以在条件中使用|,表示或的意思, 比如 2|3) command ;;
shell脚本案例
#!/bin/bash read -p "Please input a number: " n if [ -z "$n" ] then echo "Please input a number." exit 1 fi n1=`echo $n|sed 's/[0-9]//g'` if [ -n "$n1" ] then echo "Please input a number." exit 1 #elif [ $n -lt 0 ] || [ $n -gt 100 ] #then # echo "The number range is 0-100." # exit 1 fi if [ $n -lt 60 ] && [ $n -ge 0 ] then tag=1 elif [ $n -ge 60 ] && [ $n -lt 80 ] then tag=2 elif [ $n -ge 80 ] && [ $n -lt 90 ] then tag=3 elif [ $n -ge 90 ] && [ $n -le 100 ] then tag=4 else tag=0 fi case $tag in 1) echo "not ok" ;; 2) echo "ok" ;; 3) echo "ook" ;; 4) echo "oook" ;; *) echo "The number range is 0-100." ;; esac