Linux之shell编程条件判断-if,while,for,case

 

原文和做者一块儿讨论:http://www.cnblogs.com/intsmaze/p/6675350.htmlhtml

微信:intsmazeshell

 

if 语法格式编程

if condition then statements [elif condition then statements] [else statements ] fi

示例centos

vi if.shbash

#!/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:条件判断基本语法oop

[ condition ]  (注意condition先后要有空格)spa

#非空返回true,可以使用$?验证(0为true,1为false)code

#空返回false,里面条件为空格也是叫空。htm

[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。

while语法

i=1
while ((i<=3))
do
  echo $i
  let i++ #(等价((i++)))
done

case语法

case $1 in
start)
echo "starting"
;;
stop)
echo "stoping"
;;
*)#其余条件都不匹配下,执行该
echo "Usage: {start|stop}"
esac

for语法

1、方式一
N=1
for
N in 1 2 3 do echo $N done 或 N=1 for N in 1 2 3; do echo $N; done 或 N=1 for N in {1..3}; do echo $N; done #(表明1到3之间的数字)
2、方式二
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done

for ((i = 0; i <= 5; i++)); do echo "welcome $i times";done
相关文章
相关标签/搜索