Bash编程-逻辑控制

逻辑控制

  • 条件if
  • 分支case、select
  • 循环for、while、 until
  • break和continue
  • 有生之年也许你只需要用到if、for、while

If结构

  • if [ condition] ; then ..;fi
  • if [ condition ] ; then ..;else ..;fi
  • if [ condition ] ; then ..;elif ...;fi
  • 简单的逻辑可以使用&& | |去替代
  • [ -f file ] && echo file exist | | echo file not exist
  • 条件可以用命令返回值代替

条件判断的类型

  • 算术判断
  • 字符串判断
  • 逻辑判断
  • shell内置判断

算术判断

  • [ 2 -eq 2 ] 相等
  • [ 2 -ne 2 ] 不等
  • [ 3 -gt 1 ] 大于
  • [ 3 -ge 3 ] 大于等于
  • [ 3 -lt 4 ] 小于
  • [ 3 -le 3 ]小于等于
  • (())也可以表示算术比较。((10>= 8)) ,((10==10)),

字符串比较

  • [ string1 = string2 ] 如果两字符串相同,则结果为真
  • [ string1 != string2 ] 如果两字符串不相同,则结果为真
  • [ -n "$var" ] 如果字符串不是空,则结果为真
  • [ -z "$var" ] 如果字符串是空,则结果为真
  • [[ "xxxx" == x* ] 在表达式中表示0或者多个字符
  • [[ xx == x?? ]] 在表达式中表示单个字符
  • 在引用变量的时候要记得加双引号[ -z "$a" ]否则当a未定义时会语法报错

逻辑判断

  • [ 2 -ge 1 -a 3 -ge 4 ];echo$?
  • [ 2 -ge 1 -0 3 -ge 4 ];echo$?
  • [[ 2 -ge 1 && 3 -ge 4 ]];echo$?
  • [[ 2 -ge 1 || 3 -ge 4 ]];echo$?
  • [ !2 -ge 1 ];echo$?

内置判断

  • -e file 如果文件存在,则结果为真
  • -d file 如果文件是一个子目录,则结果为真
  • -f file 如果文件是一个普通文件,则结果为真
  • -r file 如果文件可读,则结果为真
  • -s file 如果文件的长度不为0,则结果为真
  • -w file 如果文件可写,则结果为真
  • -x file 如果文件可执行,则结果为真
  • [[]][]的扩展语法,在老的sh里并不支持。推荐用[]

Case结构

  • 用于条件太多的情况。每一个条件最后使用两个分号结尾,不可缺少。
case $var in
p1)...;;
p2)...;;
...
pn)...;;
*)...;;
esac

Select

  • Select var in var_list;do ....done;
  • 菜单选择,一般与case结构一起用

For循环

for(( c1 ;c2;c3 ));
  do
done
for((i=0;i<10;i++));do echo $i;done

For遍历循环

  • 用于递归数组,还可以递归以空格隔开的字符串序列。或者是某个命令的返回值。
for f in $array[*]; do
...
done
ss="aa bb cc dd";for x in $ss;do echo $x;done
for x in `ls` ;do echo $x;done
ss=(aa bb cc "sss dd");for x in "${s[@]}";do echo $x;done

While循环

  • while设置条件
i=0; 
while ((i<3));do
  echo $i; ((i=i+1);
done
  • 一行行的读取文件内容
  • while read line; do echo $line ; done < /tmp/tmp

until

i=0;
until ((i>3));do
echo $i; .
((i+=1));
done
  • while可以替代until循环

退出控制

  • return 函数返回
  • exit 脚本进程退出
  • break 退出当前循环
  • continue 跳过当前的循环,进入下一次循环
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容