shell脚本进阶篇(上)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本进阶篇(上)相关的知识,希望对你有一定的参考价值。

shell脚本是我们学习运维的难点,本篇内容简单举例shell脚本的进阶上篇,有任何技术上的指导,知识上的不足都欢迎指出点明。

 流程控制

过程式编程语言: 顺序执行   选择执行  循环执行


条件选择if语句

? 单分支

 if 判断条件;then 条件为真的分支代码 fi

 双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi

 多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else 以上条件都为假的分支代码 fi 

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


举例:

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

技术分享图片技术分享图片

执行结果如下

技术分享图片技术分享图片


举例2

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

技术分享图片

执行结果如下


技术分享图片


条件判断:case语句

case 变量引用 in 

PAT1) 分支1 ;; 

PAT2) 分支2 ;; 

... *) 默认分支 ;;

esac case支持glob风格的通配符: *: 任意长度任意字符 ?: 任意单个字符 []:指定范围内的任意单个字符 a|b: a或b


举例

创建一个脚本名为useradd.sh,
	当执行-a选项时,会批量创建用户mageuser1~mageuser20,要求mageuserX的uid为200x,mageuserxx的uid为20xx,1~8用户的shell为/sbin/nologin,9~20用户的uid为/bin/bash。最后这20个用户的密码都设置为centos
	当执行-d选项时,批量删除用户mageuser1~mageuser20。连同家目录一同删除	

技术分享图片


循环


循环执行 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件

for循环

for 变量名 in 列表;do

 循环体 

done 


举例

技术分享图片


举例

编写脚本打印矩形

技术分享图片

执行结果如下:

技术分享图片


while循环

? while CONDITION; do

 循环体

done 

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

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

? 进入条件:CONDITION为true 

? 退出条件:CONDITION为false

举例

技术分享图片


循环控制shift命令

? shift [n]

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

 ? 参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环 遍历位置参量列表时,常用到 shift

 ? ./doit.sh a b c d e f g h 

 ? ./shfit.sh a b c d e f g h

举例

技术分享图片

执行结果如下

技术分享图片


创建无限循环

? while true; do

 循环体

 ? done 

? until false; do

循环体 

? Done


(shell 脚本进阶篇下一周后更新)









以上是关于shell脚本进阶篇(上)的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本编程高级篇

Linux基础之bash脚本编程进阶篇-选择执行语句(if,case)

Shell脚本进阶

SHELL脚本编程进阶

Web应用的组件化进阶篇

Shell脚本之进阶