本文共 3970 字,大约阅读时间需要 13 分钟。
语法
1、格式1if 条件 ; then 语句; fi例:如果a大于3,打印OK[root@a ~]# vi 2.sh[root@a ~]# bash -v 2.sh #!/bin/basha=5if [ $a -gt 3 ]then echo okfiok[root@a ~]# bash 2.sh ok[root@a ~]#
2、格式2
if 条件; then 语句; else 语句; fi例:如果a小于3,则打印no ok[root@a ~]# bash -v 3.sh #!/bin/basha=2if [ $a -gt 3 ]then echo okelse echo no okfino ok[root@a ~]# bash 3.sh no ok[root@a ~]#
3、格式3
if …; then … ;elif …; then …; else …; fi例:[root@a ~]# sh -x 4.sh+ a=3+ '[' 3 -gt 4 ']'+ '[' 3 -lt 6 ']'+ echo '<6 && >1'<6 && >1[root@a ~]# sh -v 4.sh#!/bin/basha=3if [ $a -gt 4 ]then echo ">1"elif [ $a -lt 6 ]then echo "<6 && >1"else echo no okfi<6 && >1[root@a ~]#
逻辑判断表达式
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 ]; thenif [ $b -gt 5 ] || [ $b -lt 3 ]; then1、if 判断文件、目录属性
[ -f file ]判断是否是普通文件,且存在例:如果riven文件不存在,就创建#!/bin/bashc="/tmp/riven"if [ -f $c ]then echo $c existelse touch $cfi
[ -d file ] 判断是否是目录,且存在
#!/bin/bashc="/tmp/2018"if [ -d $c ]then echo $c existelse touch $cfi
[ -e file ] 判断文件或目录是否存在
#!/bin/bashc="/tmp/2018"if [ -e $c ]then echo $c existelse touch $cfi
[ -r file ] 判断文件是否可读
#!/bin/bashc="/tmp/2018"if [ -r $c ]then echo $c readableelse touch $cfi
[ -w file ] 判断文件是否可写
#!/bin/bashc="/tmp/2018"if [ -w $c ]then echo $c writeableelse touch $cfi
[ -x file ] 判断文件是否可执行
#!/bin/bashc="/tmp/2018"if [ -x $c ]then echo $c exeableelse touch $cfi因为文件不可执行,所有没有任何输出。2、脚本缩写
#!/bin/bashc="/tmp/2018"[ -f $f ] && rm -f $f#上面的命令等同于下面的命令if [-f $f ]then rm -f $ffi
#!/bin/bashc="/tmp/2018"[ -f $f ] || touch $f #如果这个文件不存在就执行后面的文件#上面的命令等同于下面的命令if [ !-f $f ] #叹号表示取反then touch $ffi
1、if [ -z "$a" ] 这个表示当变量a的值为空时会出现错误
#!/bin/bashif [ ! -f /tmp/a1 ]then echo "/tmp/a1 not exist." exit n=`wc -l /tmp/a1`if [ -z "$n" ]then echo error exitelse if [ $n -gt 100 ]then echo okfiif [ -n "$a" ] 表示当变量a的值不为空
[root@a ~]# if [ -n 2.sh ]; then echo ok; fiok[root@a ~]# if [ -n "$a" ]; then echo ok; else echo "a is null";fiok[root@a ~]# if [ -n "$aa" ]; then echo ok; else echo "a is null";fia is null[root@a ~]# if [ -n "$aa" ]; then echo ok; else echo "aa is null";fiaa is null[root@a ~]#
if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样?
[root@a ~]# grep -w 'root' /etc/passwdroot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin[root@a ~]# if grep -w 'root' /etc/passwd; then echo "root exist"; firoot:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologinroot exist[root@a ~]# if grep -wq 'root' /etc/passwd; then echo "root exist"; fi #-q不显示过滤内容root exist[root@a ~]# if ! grep -w 'user1' /etc/passwd;then useradd user1;fi # !取反
if [ ! -e file ]; then 表示文件不存在时会怎么样
if (($a<1)); then …等同于 if [ $a -lt 1 ]; then…
[ ] 中不能使用<,>,==,!=,>=,<=这样的符号1、shell中的case判断
格式:case 量名 in value1) command ;; value2) command ;; *) commond ;; esac
在case程序中,可以在条件中使用|,表示或的意思比如
2|3)command;;2、脚本案例#!/bin/bashread -p "Please input a number: " n #read命令让用户输入字符串,n表示要捕获的变量。if [ -z "$n" ] then echo "Please input a number." exit 1 fin1=`echo $n|sed 's/[0-9]//g'` #if [ -n "$n1" ]then echo "Please input a number." exit 1fiif [ $n -lt 60 ] && [ $n -ge 0 ]then tag=1elif [ $n -ge 60 ] && [ $n -lt 80 ]then tag=2elif [ $n -ge 80 ] && [ $n -lt 90 ]then tag=3elif [ $n -ge 90 ] && [ $n -le 100 ]then tag=4else tag=0ficase $tag in 1) echo "not ok" ;; 2) echo "ok" ;; 3) echo "ook" ;; 4) echo "oook" ;; *) echo "The number range is 0-100." ;; esac
转载于:https://blog.51cto.com/10690709/2145091