shell中的逻辑判断,if 判断文件目录属性,if判断的一些特殊用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell中的逻辑判断,if 判断文件目录属性,if判断的一些特殊用法相关的知识,希望对你有一定的参考价值。
shell中的逻辑判断
- 格式1:if 条件 ; then 语句; fi //如果满足条件,然后执行语句
[[email protected] shell]# cat if1.sh #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi [[email protected] shell]# sh -x if1.sh + a=5 + ‘[‘ 5 -gt 3 ‘]‘ + echo ok ok
- 格式2:if 条件; then 语句; else 语句; fi //如果满足条件,然后执行语句,不然执行else语句
[[email protected] shell]# cat if2.sh #!/bin/bash a=1 if [ $a -gt 3 ] then echo ok else echo nook fi [[email protected] shell]# sh -x if2.sh + a=1 + ‘[‘ 1 -gt 3 ‘]‘ + echo nook nook
- 格式3:if …; then … ;elif …; then …; else …; fi //如果满足条件,执行语句,不然继续满足elif条件,执行语句,都不满足执行else语句。elif条件可以写多个
[[email protected] shell]# cat if3.sh #!/bin/bash a=1 if [ $a -gt 3 ] then echo ok elif [ $a -lt 3 ] then echo "小于3" else echo nook fi [[email protected] shell]# sh -x if3.sh + a=1 + ‘[‘ 1 -gt 3 ‘]‘ + ‘[‘ 1 -lt 3 ‘]‘ + echo $‘3452602173442722163‘ 小于3
- 逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]。 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格。还可以写成if ((a>b)),只是这样不规范
[[email protected] shell]# cat if1.sh #!/bin/bash a=5 b=1 if ((a>b)) then echo ok fi [[email protected] shell]# sh -x if1.sh
- a=5
- b=1
- (( a>b ))
- echo ok
ok - 可以使用 && || 结合多个条件
[[email protected] shell]# cat if1.sh #!/bin/bash a=5 if [ $a -gt 3 ] && [ $a -lt 10 ] then echo ok fi [[email protected] shell]# sh -x if1.sh + a=5 + ‘[‘ 5 -gt 3 ‘]‘ + ‘[‘ 5 -lt 10 ‘]‘ + echo ok ok [[email protected] shell]# vim if1.sh [[email protected] shell]# cat if1.sh #!/bin/bash a=3 if [ $a -gt 3 ] && [ $a -lt 10 ] then echo ok elif [ $a -gt 3 ] || [ $a -lt 10 ] then echo "a大于3或者小于10" else echo no fi [[email protected]ilinux01 shell]# sh -x if1.sh + a=3 + ‘[‘ 3 -gt 3 ‘]‘ + ‘[‘ 3 -gt 3 ‘]‘ + ‘[‘ 3 -lt 10 ‘]‘ + echo $‘a345244247344272216334621022635020020534526021734427221610‘ a大于3或者小于10
if 判断文件、目录属性
- [ -f file ]判断是否是普通文件,且存在
- [ -d file ] 判断是否是目录,且存在
- [ -e file ] 判断文件或目录是否存在
- [ -r file ] 判断文件是否可读
- [ -w file ] 判断文件是否可写
- [ -x file ] 判断文件是否可执行
[[email protected] shell]# cat file1.sh #!/bin/bash f=/tmp/akuilinux if [ -f $f ] then echo ok else touch $f fi [[email protected] shell]# sh -x file1.sh + f=/tmp/akuilinux + ‘[‘ -f /tmp/akuilinux ‘]‘ + touch /tmp/akuilinux [[email protected] shell]# sh -x file1.sh + f=/tmp/akuilinux + ‘[‘ -f /tmp/akuilinux ‘]‘ + echo ok ok
- 在脚本里面也可以这样用,file1.sh和file2.sh的意思一样.!是取反的意思
[[email protected] shell]# cat file1.sh #!/bin/bash f=/tmp/akuilinux if [ -f $f ] then rm -f $f fi [[email protected] shell]# cat file2.sh #!/bin/bash f=/tmp/akuilinux [ -f $f ] && rm -f $f [[email protected] shell]# cat file1.sh #!/bin/bash f=/tmp/akuilinux if [ ! -f $f ] then touch $f fi [[email protected] shell]# cat file2.sh #!/bin/bash f=/tmp/akuilinux [ -f $f ] || touch $f
if判断的一些特殊用法
- if [ -z "$a" ]??这个表示当变量a的值为空时会怎么样
- if [ -n "$a" ] 表示当变量a的值不为空
在判断变量是否为空时,[]里面需要加双引号,-z和-n只能判断变量是否为空,不能判断文件是否为空
[[email protected] shell]# cat if4.sh #!/bin/bash #先判断文件是否存在,不存在退出,以免有bug if [ ! -f /tmp/lalal ] then echo "/tmp/lalal not exist." exit fi n=`wc -l /tmp/lalal` #如果值是空的退出 if [ -z "$n" ] then echo error exit #如果有值就打印出来 elif [ -n "$n" ] then echo $n fi [[email protected] shell]# cat /tmp/lalal dadhaj dahdajhj 127676 adadahj [[email protected] shell]# sh if4.sh 4 /tmp/lalal
- if grep -wq ‘user1‘ 1.txt; then 表示如果1.txt中含有‘user1‘的行时会怎么样
-w表示匹配的是一个单词 -q是不打印grep匹配的内容
shell中的case判断
- 格式
case 变量名 in value1) command ;; value2) command ;; *) command ;; esac
- 在case程序中,可以在条件中使用|,表示或的意思, 比如
2|3) command ;;
- 案列
#!/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 fi if [ $n -lt 60 ] && [ $n -ge 0 ] then tag=1 elif [ $n -ge 60 ] && [ $n -lt 80 ] then #!/bin/bash #read和用户交互,把用户输入的值赋给n read -p "Please input a number: " n #如果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 fi #如果是数字,小于60时,打个标记,如果大于60小于80,打个标记2,以此类推 if [ $n -lt 60 ] && [ $n -ge 0 ] then #判断输入的是否为数字,不是数字时提示并退出 n1=`echo $n|sed ‘s/[0-9]//g‘` if [ -n "$n1" ] then echo "Please input a number." exit 1 fi #如果是数字,小于60时,打个标记,如果大于60小于80,打个标记2,以此类推 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判断标记,并给出结果 case $tag in 1) echo "not ok" ;; 2) echo "ok" ;; 3) echo "ook" ;; 4) echo "oook" ;; *) echo "The number range is 0-100." ;; esac
以上是关于shell中的逻辑判断,if 判断文件目录属性,if判断的一些特殊用法的主要内容,如果未能解决你的问题,请参考以下文章
shell脚本中的逻辑判断文件目录属性判断 if特殊用法case判断
shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断
六十八shell脚本中的逻辑判断文件目录属性判断if特殊用法case判断
shell中的逻辑判断,if 判断文件目录属性,if判断的一些特殊用法