shell脚本的进阶

一:条件选择if语句

注意:if语句可嵌套

单分支:

if 判断条件;then

          条件为真的分支代码

fi

双分支:

if 判断条件;the

       条件为真的分支代码

else

条件为假的分支代码

fi

多分支

if 判断条件1;then

        条件为真的分支代码

elif 判断条件2;then

          条件为真的分支代码

elif 判断条件3;then

            条件为真的分支代码

else

            以上条件都为假的分支代码

fi

注:逐条件进行判断,第一次遇为“真”条件时,执行奇分支,然后结束整个if语句

针对上述条件的练习题;

1,编写脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参 数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户 的id号等信息


脚本示例


执行结果

2,编写脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数


脚本示例


执行结果

二:条件判断:case语句

语法格式:

case 变量引用 in

PATH1)

        分支1

        ;;

PATH2)

            分支2

                ;;

........

*)

默认分支

        ;;

esac    

注:case支持glob风格的通配符:

*:任意长度的任意字符

?:任意单个字符

[]:指定范围内的任意单个字符

a|b:a或b

1,针对上述语句的练习题示范

2、编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的 是yes还是no,或是其它信息


脚本示例


执行效果

2,编写脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型 (普通,目录,链接,其它文件类型)


脚本示例


执行效果

三,循环

循环执行

    将某段代码重复运行多次

    重复运行多少次

    循环次数事先已知

    循环次数事先未知

有进入条件和退出条件

循环又分为三种:for,while,until

1,for循环

语法格式

for 变量名 in 列表;do

        循环体

done

执行机制:

依次将列表中的元素赋值给:变量名”每次赋值后即执行一次循环体;直到列表中的元素耗尽,循环结束

列表的生成方式

(1)直接给出列表

(2)整数列表:

        (a) {start..end}

        (b) $(seq [start[step]] end)

(3)返回列表的命令

$(COMMAND)

(4)使用glob,如:*.sh

(5)变量引用;

$@,$*

针对for循环下的练习题

1,判断/var/目录下所有文件的类型


脚本示例


执行效果

2,添加10个用户user1-user10,密码为8位随机字符


脚本示例


执行结果

3。/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件, 以K开头的输出为文件加stop,以S开头的输出为文件名加start,如K34filename stop S66filename start


利用ls命令显示下图所有列表,再用bash的字符串测试是否存在后面追加输入内容


实现效果

4、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和


利用bash测试是否为正整数


执行效果

5、计算100以内所有能被3整除的整数之和



执行效果图

6,打印九九乘法表。



7,在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字 母,如:1AbCdeFgH.html


四:while循环

while CONDITION;do

                   循环体

done

CONDITION:循环控制条件;进入循环之前,先在一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false"终止循环

因此;CONDTION一般应该又循环控制变量而此变量的值会在循环体不断地被修正

进入条件:CONDITION为true

退出条件:CONDITION为false

针对以上条件所做的练习题

1,编写脚本,求100以内所有正奇数之和



执行结果


2、编写脚本,打印九九乘法表


脚本示例


实现效果

3、编写脚本,实现打印国际象棋棋盘


脚本示例


执行效果

4、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显 示其中的最大值和最小值


脚本示范


执行结果

五,until循环   (与while循环条件相反,很少用)

语法:until CONDITON ;do

            循环体

done

进入条件:CONDITION为false

退出条件:CONDITION为true

练习until:

每隔3秒钟到系统上获取已经登录的用户的信息;如果发 现用户liyi登录,则将登录时间和主机记录于日志 /data/login.log中,并退出脚本


脚本示范


执行效果

六,循环控制语句continue

在循环任务中,如果遇到continue就跳过本次循环,执行下一次循环

continue 后面加参数continue [N] 指定结束第N层的本轮循环,而直接进入下一轮判断;最内层为 第1层

示例:

while CONDTIITON1; do

     CMD1

     ... 

     if CONDITION2; then 

     continue                      #如果满足第二个条件执行continue命令


     fi 

         CMDn                    #跳过接下来要执行的任务而不是退出循环

     ... 

     done

七,循环控制语句break

在循环体中遇见break则结束整个任务。

break后面加参数 bark[N]指定提前结束第N层循环,最内层为第一层

示例:

while CONDTIITON1;do

    CMD1

    ....

if CONDITION2;THEN

        break       #如果条件2满足条件,执行break结束整个循环

fi

CMDn

....

done


八,循环控制shift命令

shift [n] 

用于将参量列表 list 左移指定次数,缺省为左移一次。 

参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。

while 循环遍 历位置参量列表时,常用到 shift


练习shift

脚本示例
执行效果


九,特殊用法

while循环的特殊用法(遍历文件的每一行):

语法:

while read line; do

        循环体

done < /PATH/FROM/SOMEFILE

依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line


双小括号写法:即((…))格式,也可以用于算术运算

双小括号方法也可以使bash Shell实现C语言风格的变量操作

    I=10 

    ((I++))

for循环的特殊格式:

for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))

do

            循环体     

done

控制变量初始化:仅在运行到循环代码段时执行一次

控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做 条件判断


十,select循环与菜单

语法:

select variable in list

    do

循环体命令

done

select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在 标准错误上,并显示 PS3 提示符,等待用户输入

用户输入菜单列表中的某个数字,执行相应的命令

用户输入被保存在内置变量 REPLY 中


slect 与case

select 循环主要用于创建菜单,按数字顺序排列的,它是个无限循环,因此要记住用 break 命令退 出循环,或用 exit 命令终止脚本。也可以按 ctrl+c 退出循环

select 经常和 case 联合使用

举例:创建菜单和退出菜单


脚本示范


脚本执行效果

十一,信号补捉

trap '触发指令' 信号

自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作

trap '' 信号  :忽略信号的操作

trap '-' 信号 :恢复原信号的操作

trap -p   :列出自定义信号操作

示例:

打印数字捕捉信号



完结。

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

推荐阅读更多精彩内容