目录
一、case语句
检查、判断变量的取值,命令序列最后必须以分号结尾(双分号)
case 变量 in
模式1)
命令序列1;;
模式2)
命令序列2;;
...
*)
默认命令序列
esac
示例
xm@ubuntu:~/shell$ cat casetest.sh
#!/bin/bashread -p "请输入redhat|fedora:" key
case $key in
redhat)
echo "fedora.";;
fedora)
echo "redhat.";;
*)
echo "必须输入redhat或fedora."
esac
xm@ubuntu:~/shell$ chmod +x casetest.sh
xm@ubuntu:~/shell$ ./casetest.sh
请输入redhat|fedora:redhat
fedora.
判断用户的输入
二、数组
数组也是一个变量,是一个有点特殊的变量
存储多个数据的集合就是数组
xm@ubuntu:~/shell$ test=(1 2 3)
xm@ubuntu:~/shell$ echo $test[0]
1[0]
xm@ubuntu:~/shell$ echo $test[0^C
xm@ubuntu:~/shell$ echo ${test[0]}
1
xm@ubuntu:~/shell$ echo ${test[1]}
2
xm@ubuntu:~/shell$ echo ${test[2]}
3
石头剪刀布脚本
三、Shell函数
在Shell环境中,将一些需要重复使用的操作,定义为公共的语句块,即可以称为函数,有两种表达方式
function 函数名 {
命令序列
...
}
函数名(){
命令序列
}
调用已经定义的函数,格式:函数名
函数传值
格式:函数名 值1 值2 ...
传递的值作为函数的"位置参数"
xm@ubuntu:~/shell$ imsg(){
> echo "xiaoma"
> echo "xiaopeng"
> }
xm@ubuntu:~/shell$ imsg
xiaoma
xiaopeng
xm@ubuntu:~/shell$ add(){
> echo $[$1+$2]
> }
xm@ubuntu:~/shell$ add 1 2
3
多进程版ping测试,wait会等待后台执行的程序,不加wait则脚本执行完,后台程序可能有未执行完成
四、中断与退出
continue可以结束单次循环
break可以结束循环体
exit可以退出脚本
五、字符串处理与变量初始化
以下操作可以看做字符的叠加
xm@ubuntu:~/shell$ echo $[a+1]
13
xm@ubuntu:~/shell$ ball=""
xm@ubuntu:~/shell$ ball+=11
xm@ubuntu:~/shell$ echo $ball
11
xm@ubuntu:~/shell$ ball+=abc
xm@ubuntu:~/shell$ echo $ball
11abc
xm@ubuntu:~/shell$ unset ball
5.1 子串截取
语法截取:${变量:起始位置:长度},其中#可以统计变量的长度,-2表示截止到倒数第二个
xm@ubuntu:~/shell$ phone=12345678
xm@ubuntu:~/shell$ echo ${#phone}
8
xm@ubuntu:~/shell$ echo ${phone:0:3}
123
xm@ubuntu:~/shell$ echo ${phone:3:3}
456
xm@ubuntu:~/shell$ echo ${phone:4}
5678
xm@ubuntu:~/shell$ echo ${phone:4:-2}
56
5.2 子串替换
替换一个结果:${变量/旧字串/新字串}
替换全部结果:${变量//旧字串/新字串}
xm@ubuntu:~/shell$ phone=12345678930
xm@ubuntu:~/shell$ echo ${phone/3/X}
12X45678930
xm@ubuntu:~/shell$ echo ${phone//3/X}
12X456789X0
5.3 字串掐头
从左到右,最短匹配删除:${变量#关键词}
从左到右,最长匹配删除:${变量##关键词}
m@ubuntu:~/shell$ A=`head -1 /etc/passwd`
xm@ubuntu:~/shell$ echo $A
root:x:0:0:root:/root:/bin/bash
xm@ubuntu:~/shell$ echo ${A#*:}
x:0:0:root:/root:/bin/bash
xm@ubuntu:~/shell$ echo ${A##*:}
/bin/bash
注意:前面的操作都不会改变原有变量的值,若需要改变后的值,可以赋值到新的变量
xm@ubuntu:~/shell$ echo $B
/bin/bash
5.4 字串去尾
从右到左,最短匹配删除:${变量%关键词}
从右到左,最长匹配删除:${变量%%关键词}
xm@ubuntu:~/shell$ A=`head -1 /etc/passwd`
xm@ubuntu:~/shell$ echo $A
root:x:0:0:root:/root:/bin/bash
xm@ubuntu:~/shell$ echo ${A%:*}
root:x:0:0:root:/root
xm@ubuntu:~/shell$ echo ${A%%:*}
root
5.5 批量改扩展名
5.6 变量初始值
变量有值,则返回变量的值,变量无值,则返回初始值,格式:${变量:-关键词},返回初始值不会给变量赋值
xm@ubuntu:~/shell$ echo ${X:-xyz}
123
xm@ubuntu:~/shell$ echo ${ABC:-xyz}
xyz
xm@ubuntu:~/shell$ echo ${ABC}
创建系统用户
六、随机密码(三种方式生成)
字串截取生产随机密码
使用命令生成随机密码uuidgen或者openssl
使用随机设备文件(/dev/random、/dev/urandom)
tr命令可以对数据进行替换、删除等操作,-c:取反;-d:删除
urandom生成的随机数效率更高
七、DEMO
7.1 进度条
7.2 菜单选择
7.3 fork炸弹
无限循环自己,消耗系统资源,不要轻易尝试,电脑不出意料的意料结果GG,重启