阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

十分钟完成Bash 脚本进阶!列举Bash经典用法及其案例

68次阅读
没有评论

共计 3789 个字符,预计需要花费 10 分钟才能阅读完成。

前言:在 Linux 中,Bash 脚本是很基础的知识,大家可能一听脚本感觉很高大上,像小编当初刚开始学一样,感觉会写脚本的都是大神。虽然复杂的脚本是很烧脑,但是,当我们熟练的掌握了其中的用法与技巧,再多加练习,总有一天也会成为得心应手的脚本大神。脚本在生产中的作用,想必小编我不说,大家也都知道,脚本写的 6,可以省下很多复杂的操作,减轻自己的工作压力。好了,废话不多说,接下来,就是 Bash 脚本的用法展示。

  • 一、条件选择、判断(if·、case)
  • 二、四个循环(for、while、until、select)
  • 三、循环里的一些命令与技巧(continue、break、shift…)
  • 四、信号捕获 trap

一、条件选择、判断

(1)条件选择 if

1、用法格式

if 判断条件 1 ; then

条件为真的分支代码

elif 判断条件 2 ; then

条件为真的分支代码

elif 判断条件 3 ; then

条件为真的分支代码

else

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

fi

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

2、经典案例:

① 判断年纪

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:请输入年纪,先判断输入的是否含有除数字以外的字符,有,就报错; 没有,继续判断是否小于 150,是否大于 18。

② 判断分数

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:请输入成绩,先判断输入的是否含有除数字以外的字符,有,就报错; 没有,继续判断是否大于 100,是否大于 85,是否大于 60。

(2)条件判断 case

1、用法格式

case $name in;

PART1)

cmd

;;

PART2)

cmd

;;

*)

cmd

;;

esac

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

*: 任意长度任意字符

?: 任意单个字符

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

a|b: a 或 b

2、案例:

判断 yes or no

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:请输入 yes or no,回答 Y /y、yes 各种大小写组合为 yes; 回答 N /n、No 各种大小写组合为 no。

二、四个循环

(1)for

1、用法格式

① for name in 列表 ;do

循环体

done

② for ((exp1; exp2; exp3)) ;do

cmd

done

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

exp1 只执行一次,相当于在 for 里嵌了 while

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

列表的表示方法,可以 glob 通配符,如{1..10}、*.sh ; 也可以变量引用,如:`seq 1 $name`

2、案例:

① 求出 (1+2+…+n) 的总和

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:sum 初始值为 0,请输入一个数,先判断输入的是否含有除数字以外的字符,有,就报错; 没有判断是否为 0,不为 0 进入 for 循环,i 的范围为 1~ 输入的数,每次的循环为 sum=sum+i,循环结束,最后输出 sum 的值。

② 求出 (1+2+…+100) 的总和

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:i=1,num=0; 当 i <=100,进入循环,若 i÷2 取余 =1,则 sum=sum+i,i=i+1。

(2)while

1、用法格式

while 循环控制条件 ;do

循环

done

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

2、特殊用法(遍历文件的每一行):

while read line; do 控制变量初始化

循环体

done < /PATH/FROM/SOMEFILE

或 cat /PATH/FROM/SOMEFILE | while read line; do

循环体

done

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

3、案例:

① 100 以内所有正奇数之和

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:sum 初始值为 0,i 的初始值为 1; 请输入一个数,先判断输入的是否含有除数字以外的字符,有,就报错; 没有当 i <100 时,进入循环,判断 i÷2 取余 是否不为 0,不为 0 时为奇数,sum=sum+i,i+1,为 0,i+1; 循环结束,最后输出 sum 的值。

(3)until 循环

1、用法

unitl 循环条件 ;do

循环

done

进入条件:循环条件为 true ; 退出条件:循环条件为 false; 刚好和 while 相反,所以不常用,用 while 就行。

2、案例

监控 xiaoming 用户,登录就杀死

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:每隔 0.5 秒扫描,直到发现 xiaoming 用户登录,杀死这个进程,退出脚本,用于监控用户登录。

(4)select 循环与菜单

1、用法

select variable in list

do

循环体命令

done

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

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

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

④ select 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 按 命令终止脚本。也可以按 ctrl+ c 退出循环

⑤ select 和 经常和 case 联合使用

⑥ 与 for 循环类似,可以省略 in list,此时使用位置参量

2、案例:

生成菜单,并显示选中的价钱

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:PS3 是 select 的提示符,自动生成菜单,选择 5break 退出循环。

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

三、循环里的一些用法

(1)循环控制语句

continue [N]:提前结束第 N 层的本轮循环,而直接进入下一轮判断; 最内层为第 1 层

break [N]:提前结束第 N 层循环,最内侧为第 1 层

例:while CONDTITON1; do

CMD1

if CONDITION2; then

continue / break

fi

CMD2

done

2、案例:

① 求 (1+3+…+49+53+…+100) 的和

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:做 1 +2+…+100 的循环,当 i =51 时,跳过这次循环,但是继续整个循环,结果为:sum=2449

② 求 (1+3+…+49) 的和

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:做 1 +2+…+100 的循环,当 i =51 时,跳出整个循环,结果为:sum=625

(2)循环控制 shift 命令

1、作用

用于将参数列表 list 左移指定次数,最左端的那个参数就从列表中删除,其后边的参数继续进入循环

2、案例:

① 创建指定的多个用户

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:如果没有输入参数(参数的总数为 0),提示错误并退出; 反之,进入循环; 若第一个参数不为空字符,则创建以第一个参数为名的用户,并移除第一个参数,将紧跟的参数左移作为第一个参数,直到没有第一个参数,退出。

② 打印直角三角形的字符

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

(3)返回值结果

true 永远返回成功结果

: null command , 什么也不干,返回成功结果

false 永远返回错误结果

创建无限循环

while true ;do

循环体

done

(4)循环中可并行执行,使脚本运行更快

1、用法

for name in 列表 ;do

{

循环体

}&

done

wait

2、实例:

搜寻自己指定 ip(子网掩码为 24 的)的网段中,UP 的 ip 地址

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:请输入一个 IP 地址例 192.168.37.234,如果格式不是 0.0.0.0 则报错退出; 正确则进入循环,IP 变量的值为 192.168.37. i 的范围为 1 -254,并行 ping 192.168.37.1-154,ping 通就输出此 IP 为 UP。直到循环结束。

四、信号捕获 trap

1、用法格式

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

trap ” 信号,忽略信号的操作

trap ‘-‘ 信号,恢复原信号的操作

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

信号可以 3 种表达方法:信号的数字 2、全名 SIGINT、缩写 INT

2、常用信号:

1) SIGHUP: 无须关闭进程而让其重读配置文件

2) SIGINT: 中止正在运行的进程; 相当于 Ctrl+c

3) SIGQUIT: 相当于 ctrl+\

9) SIGKILL: 强制杀死正在运行的进程

15) SIGTERM:终止正在运行的进程(默认为 15)

18) SIGCONT:继续运行

19) SIGSTOP:后台休眠

9 信号,强制杀死,捕获不住

3、案例:

① 打印 0 -9,ctrl+ c 不能终止

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:i=0,当 i <10,每休眠 1 秒,i+1,捕获 2 信号,并执行 echo press ctrl+c

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

② 打印 0 -3,ctrl+ c 不能终止,3 之后恢复,能终止

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

分析:i=0,当 i <3,每休眠 1 秒,i+1,捕获 2 信号;i>3 时,解除捕获 2 信号。

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

五、脚本小知识(持续更新)

1、生成随机字符 cat /dev/urandom

生成 8 个随机大小写字母或数字 cat /dev/urandom |tr -dc [:alnum:] |head -c 8

2、生成随机数 echo $RANDOM

确定范围 echo $[RANDOM%7] 随机 7 个数(0-6)

echo $[$[RANDOM%7]+31] 随机 7 个数(31-37)

3、echo 打印颜色字

echo -e “\033[31malong\033[0m” 显示红色 along

echo -e “\033[1;31malong\033[0m” 高亮显示红色 along

echo -e “\033[41malong\033[0m” 显示背景色为红色的 along

echo -e “\033[31;5malong\033[0m” 显示闪烁的红色 along

color=$[$[RANDOM%7]+31]

echo -ne “\033[1;${color};5m*\033[0m” 显示闪烁的随机色 along

六、分享几个有意思的小脚本

1、9×9 乘法表

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

2、彩色等腰三角形

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

3、国际象棋棋盘

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

 十分钟完成 Bash 脚本进阶!列举 Bash 经典用法及其案例

好了,今天的内容就到这里了,其实小编的脚本功底也是小白级别的,大家一起努力,争取进阶为脚本大神!!!

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-12-03发表,共计3789字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中