20.5 shell 脚本中的逻辑判断
不带 else
格式 1:if 条件 ; then 语句; fi(这种格式常用)
解释: 如果满足条件, 然后怎样, 最后怎样
实例:
1 命令行形式表示
- [root@AliKvn ~]# a=5
- [root@AliKvn ~]# if [ $a -gt 3 ]
- > then
- > echo ok
- > fi
- ok
- [root@AliKvn ~]# if [ $a -gt 3 ]; then echo ok; fi
解释:
-gt 3 表示大于 3
整条参数的意思就是, 如果 a 大于 3, 显示 ok.
上面 2 条参数都是同样效果, 分开写就用上面的格式, 一条命令的格式就参考下面的.
2 脚本形式表示
编写脚本
- [root@AliKvn shell]# vim if1.sh
- #!/bin/bash
- a=5
- if [ $a -gt 3 ]
- then
- echo ok
- fi
执行
- [root@AliKvn shell]# sh if1.sh
- ok
带有 else, 表示否则.
格式 2:if 条件; then 语句; else 语句; fi
解释: 如果满足条件, 然后怎样; 如果不满足条件, 然后怎样.
实例:
1 编写脚本
a=1, 大于 3 就 ok, 否则, no.
- [root@AliKvn shell]# vim if2.sh
- #!/bin/bash
- a=1
- if [ $a -gt 3 ]
- then
- echo ok
- else
- echo no
- fi
2 执行过程
- [root@AliKvn shell]# sh -x if2.sh
- + a=1 a=1
+ '[' 1 -gt 3 ']' 1 与 3 比较, 不满足 > 3 条件,
+ echo no 但是满足脚本中的 else
no 所以最后输出结果是 no
带有 elif, 附件条件, 同个脚本可以写多个 elif
格式 3:if ...; then ... ;elif ...; then ...; else ...; fi
解释:
实例:
1 编写脚本
- [root@AliKvn shell]# vim if3.sh
- #!/bin/bash
- a=3
- if [ $a -gt 4 ]
- then
- echo ">1"
- elif [$a -gt 6]
- then
- echo "<6 &&>1"
- else
- echo no
- fi
参数解释:
elif [$a -gt 6] 而且 a>6,
then
echo "<6 &&>1" 则输出结果:<6 &&>1
2 执行过程
- [root@AliKvn shell]# sh -x if3.sh
- + a=3
- + '[' 3 -gt 4 ']'
- + '[' 3 -gt 6 ']'
- + echo no
- no
逻辑判断表达式: if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等
大于小于等于等说明:-gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格
大于小于等于也可以用这种方法表示,
- [root@AliKvn shell]# a=3
- [root@AliKvn shell]# if ((a>1)); then echo ok; fi
- ok
可以使用 && || 结合多个条件(&& 并且,|| 或者)
- if [ $a -gt 5 ] && [ $a -lt 10 ]; then
- if [ $b -gt 5 ] || [ $b -lt 3 ]; then
20.6 文件目录属性判断
[ -f file ]判断是否是普通文件, 且存在
实验
1 编写脚本
- [root@AliKvn shell]# !vim
- vim file-f.sh
- #!/bin/bash
- f="/tmp/shell-f.test"
- if [ -f $f ]
- then
- echo $f exist.
- else
- touch $f
- fi
解释:
f="/tmp/shell-f.test" 变量 f=/tmp/shell-f.test 这个文件,
if [ -f $f ] 如果它是个文件,
then 则
echo $f exist. 输出 $f 变量 exist
else 否则
touch $f 创建 $f 文件
fi
- [root@AliKvn shell]# sh -x file-f.sh
- + f=/tmp/shell-f.test
- + '[' -f /tmp/shell-f.test ']'
- + echo /tmp/shell-f.test exist.
- /tmp/shell-f.test exist.
- [root@AliKvn shell]# vim file-d.sh
- #!/bin/bash
- f="/tmp/shell-f.test"
- if [ -d $f ]
- then
- echo $f exist.
- else
- touch $f
- fi
- [root@AliKvn shell]# sh -x file-d.sh
- + f=/tmp/shell-f.test
- + '[' -d /tmp/shell-f.test ']'
- + touch /tmp/shell-f.test
- [root@AliKvn shell]# !vim
- vim file-d.sh
- #!/bin/bash
- f="/tmp/shell-f.test"
- if [ -e $f ]
- then
- echo $f exist.
- else
- touch $f
- fi
- [root@AliKvn shell]# sh -x !$
- sh -x file-d.sh
- + f=/tmp/shell-f.test
- + '[' -e /tmp/shell-f.test ']'
- + echo /tmp/shell-f.test exist.
- /tmp/shell-f.test exist.
- [root@AliKvn shell]# !vim
- vim file-d.sh
- #!/bin/bash
- f="/tmp/shell-f.test"
- if [ -r $f ]
- then
- echo $f readable
- else
- echo $f unreadable
- fi
- [root@AliKvn shell]# sh file-d.sh
- /tmp/shell-f.test readable
- [root@AliKvn shell]# !vim
- vim file-d.sh
- #!/bin/bash
- f="/tmp/shell-f.test"
- if [ -r $f ]
- then
- echo $f writeable
- else
- echo $f unwriteable
- fi
- [root@AliKvn shell]# sh file-d.sh
- /tmp/shell-f.test writeable
- #vim file-d.sh
- #!/bin/bash
- f="/tmp/shell-f.test"
- if [ -r $f ]
- then
- echo $f writeable
- else
- echo $f unwriteable
- fi
- [root@AliKvn shell]# !vim
- vim file-d.sh
- #!/bin/bash
- f="/tmp/shell-f.test"
- if [ -f $f ]
- then
- rm -f $f
- fi
- [root@AliKvn shell]# vim shell20-7.sh
- #!/bin/bash
- [root@AliKvn shell]# sh -x shell20-7.sh
- ++ wc -l /tmp/lalal
- wc: /tmp/lalal: No such file or directory
- + n=
- + '[' -z ''']'
- + echo error
- error
- + exit
- [root@AliKvn shell]# !vim
- vim file-f.sh
- #!/bin/bash
- f="/tmp/shell-f.test"
- if [ -f $f ]
- then
- echo $f exist.
- else
- touch $f
- fi
- [root@AliKvn shell]# !vim
- vim file-f.sh
- [root@AliKvn shell]# sh -x !$
- sh -x file-f.sh
- + '[' '!' -f /tmp/lalal ']'
- + echo '/tmp/lalal not exist.'
- + exit
- [root@AliKvn shell]# sh file-f.sh
- [root@AliKvn shell]# if [ -n 01.sh ]; then echo yes; fi
- yes
- [root@AliKvn ~]# echo $b
- [root@AliKvn ~]# if [ -n "$b" ]; then echo $b; else echo "b is not here"; fi
- [root@AliKvn ~]# if grep -wq 'mysql' /etc/passwd; then echo "exist"; fi
- exist
- [root@AliKvn ~]# if ! grep -wq 'mysql1' /etc/passwd; then echo "don't exist"; fi
- don't exist
- [root@AliKvn ~]# if grep -wq 'mysql1' /etc/passwd; then echo "exist";else echo "don't exist "; fi
- don't exist
- 2|3)
- command
- ;;
- [root@AliKvn shell]# cd /root/shell/
- [root@AliKvn shell]# vim sh-case-test.sh
- #!/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
- 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 "no pass"
- ;;
- 2)
- echo "pass"
- ;;
- 3)
- echo "good"
- ;;
- 4)
- echo "very good"
- ;;
- *)
- echo "The number range is 0-100."
- ;;
- esac
- [root@AliKvn ~]# echo $n
- 100
- fi
- case $tag in
- echo "very good" very good
- ;;
- [root@AliKvn shell]# sh -x sh-case-test.sh
- + read -p 'Please input a number:' n
- + '[' -z 111 ']'
- ++ sed 's/[0-9]//g'
- ++ echo 111
- + n1=
- + '[' -n ''']'
- + '[' 111 -lt 60 ']'
- + '[' 111 -ge 60 ']'
- + '[' 111 -lt 80 ']'
- + '[' 111 -ge 80 ']'
- + '[' 111 -lt 90 ']'
- + '[' 111 -ge 90 ']'
- + '[' 111 -le 100 ']'
- + tag=0
- + case $tag in
- + echo 'The number range is 0-100.'
- [root@AliKvn shell]# sh -x sh-case-test.sh
- + read -p 'Please input a number:' n
- + '[' -z ah1 ']'
- ++ sed 's/[0-9]//g'
- ++ echo ah1
- + n1=ah
- + '[' -n ah ']'
- + echo 'Please input a number.'
- pass
- [root@AliKvn shell]# sh sh-case-test.sh
- good
- [root@AliKvn shell]# sh sh-case-test.sh
- very good
- [root@AliKvn shell]# sh sh-case-test.sh
- [root@AliKvn shell]# sh -x sh-case-test.sh
- + read -p 'Please input a number:' n
- + '[' -z 60 ']'
- ++ sed 's/[0-9]//g'
- ++ echo 60
- + n1=
- + '[' -n ''']'
- + '[' 60 -lt 60 ']'
- + '[' 60 -ge 60 ']'
- + '[' 60 -lt 80 ']'
- + tag=2
- + case $tag in
- + echo pass
- pass
- [root@AliKvn shell]# sh -x sh-case-test.sh
- + read -p 'Please input a number:' n
- + '[' -z 88 ']'
- ++ sed 's/[0-9]//g'
- ++ echo 88
- + n1=
- + '[' -n ''']'
- + '[' 88 -lt 60 ']'
- + '[' 88 -ge 60 ']'
- + '[' 88 -lt 80 ']'
- + '[' 88 -ge 80 ']'
- + '[' 88 -lt 90 ']'
- + tag=3
- + case $tag in
- + echo good
- good
- [root@AliKvn shell]# sh -x sh-case-test.sh
- + read -p 'Please input a number:' n
- + '[' -z 98 ']'
- ++ sed 's/[0-9]//g'
- ++ echo 98
- + n1=
- + '[' -n ''']'
- + '[' 98 -lt 60 ']'
- + '[' 98 -ge 60 ']'
- + '[' 98 -lt 80 ']'
- + '[' 98 -ge 80 ']'
- + '[' 98 -lt 90 ']'
- + '[' 98 -ge 90 ']'
- + '[' 98 -le 100 ']'
- + tag=4
- + case $tag in
- + echo 'very good'
- very good
- [root@AliKvn shell]# sh -x sh-case-test.sh
- + read -p 'Please input a number:' n
- + '[' -z 100 ']'
- ++ sed 's/[0-9]//g'
- ++ echo 100
- + n1=
- + '[' -n ''']'
- + '[' 100 -lt 60 ']'
- + '[' 100 -ge 60 ']'
- + '[' 100 -lt 80 ']'
- + '[' 100 -ge 80 ']'
- + '[' 100 -lt 90 ']'
- + '[' 100 -ge 90 ']'
- + '[' 100 -le 100 ']'
- + tag=4
- + case $tag in
- + echo 'very good'
- very good
- 4 done.
来源: http://www.bubuko.com/infodetail-2624758.html