if 语法格式
- if condition
- then statements
- [elif condition
- then statements]
- [else
- statements ]
- fi
示例
vi if.sh
- #!/bin/bash
- if[ $1 = root ]
- then
- echo "hello $2 , welcome !"
- elif[ $1 = intsmaze ]
- then
- echo "hello ${2}, welcome !"
- else
- echo "SB${2}, get out here !"
- fi
sh if.sh intsmaze nihao 通过执行脚本时,在脚本命令的后面传入参数。
1:条件判断基本语法
[condition] (注意 condition 前后要有空格)
#非空返回 true,可使用 $? 验证(0 为 true,1 为 false)
#空返回 false,里面条件为空格也是叫空。
- [hadoop@centos - Reall - 131 shtest] $
- if [1];
- then echo ok;
- else echo bad;
- fi;
- ok[hadoop@centos - Reall - 131 shtest] $
- if [0];
- then echo ok;
- else echo bad;
- fi;
- ok[hadoop@centos - Reall - 131 shtest] $
- if [a];
- then echo ok;
- else echo bad;
- fi;
- ok[hadoop@centos - Reall - 131 shtest] $
- if [];
- then echo ok;
- else echo bad;
- fi;
- bad[hadoop@centos - Reall - 131 shtest] $
- if [];
- then echo ok;
- else echo bad;
- fi;
- bad
注意 [ ] 内部的 = 周边的空格,有区别:
- [hadoop@centos - Reall - 131 shtest] $
- if [a = b];
- then echo ok;
- else echo bad;
- fi;
- ok[hadoop@centos - Reall - 131 shtest] $
- if [a = b];
- then echo ok;
- else echo bad;
- fi;
- bad
#a=b 它识别为一个整体的字符串,所以条件判断为 true
短路(理解为三元运算符)
[condition] && echo OK || echo notok
条件满足,执行 && 后面的语句;条件不满足,执行 || 后面的语句
2:条件判断组合
注:[] 与 [[]] 的区别:[[]] 中逻辑组合可以使用 &&(与) ,||(或) ,而 [] 里面逻辑组合可以用 -a(与) ,-o(或)。
- [hadoop@centos - Reall - 131 shtest] $
- if [a = b && b = c];
- then echo ok;
- else echo bad;
- fi - bash: [: missing`]'
- bad
- [hadoop@centos-Reall-131 shtest]$ if [ a = b -a b = b ]; then echo ok;else echo bad;fi
- bad
- [hadoop@centos-Reall-131 shtest]$ if [ a = b -o b = b ]; then echo ok;else echo bad;fi
- ok
- [hadoop@centos-Reall-131 shtest]$ if [[ a = b && b = b ]]; then echo ok;else echo bad;fi
- bad
- [hadoop@centos-Reall-131 shtest]$ if [[ a = b || b = b ]]; then echo ok;else echo bad;fi
- ok'
3:常用判断运算符
字符串比较:= ,!= ,-z 字符串长度是为 0 返回 true,-n 字符串长度是不为 0 返回 true,这里不包括空格的情况。
- [hadoop@centos - Reall - 131 shtest] $
- if ['aa' = 'bb'];
- then echo ok;
- else echo bad;
- fi#引号可有可无,当然在进行比较时最好使用引号更好表示。bad[hadoop@centos - Reall - 131 shtest] $
- if [ - n "aa"];
- then echo ok;
- else echo bad;
- fi ok[hadoop@centos - Reall - 131 shtest] $
- if [ - z ""];
- then echo ok;
- else echo bad;
- fi ok
整数比较:
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
文件判断:
-d 是否为目录
-f 是否为文件
-e 是否存在
- [hadoop@centos - Reall - 131 shtest] $
- if [ - d / home / hadoop];
- then echo ok;
- else echo bad;
- fi ok[hadoop@centos - Reall - 131 shtest] $
- if [ - f / home / hadoop / ];
- then echo ok;
- else echo bad;
- fi bad[hadoop@centos - Reall - 131 shtest] $
- if [ - e / home / hadoop / ];
- then echo ok;
- else echo bad;
- fi ok
路径必须找得到,如果没有找到指定路径的文件,则判断条件就为 false。
- i=1while((i<=3))
- do
- echo $i
- let i++#(等价((i++)))done
- case $1in
- start)
- echo "starting"
- ;;
- stop)
- echo "stoping"
- ;;
- *)#其他条件都不匹配下,执行该
- echo "Usage: {start|stop}"
- esac
- N=1forNin1 2 3do
- echo $N
- done
- 或N=1
- forNin1 2 3; do echo $N; done
- 或N=1
- forNin{1..3}; do echo $N; done#(代表1到3之间的数字)
- for((i = 0; i <= 5; i++))
- do
- echo "welcome $i times"done或
- for((i = 0; i <= 5; i++)); do echo"welcome $i times";done
来源: http://www.cnblogs.com/intsmaze/p/6675350.html