Shell脚本函数与子串处理

目录

一、case语句

二、数组

三、Shell函数

四、中断与退出

五、字符串处理与变量初始化

5.1 子串截取

5.2 子串替换

5.3 字串掐头

5.4 字串去尾

5.5 批量改扩展名

5.6 变量初始值

六、随机密码(三种方式生成)

七、DEMO

7.1 进度条

7.2 菜单选择

7.3 fork炸弹


一、case语句

检查、判断变量的取值,命令序列最后必须以分号结尾(双分号)

case 变量 in
模式1)
    命令序列1;;
模式2)
    命令序列2;;
...
*)
    默认命令序列
esac

示例

xm@ubuntu:~/shell$ cat casetest.sh 
#!/bin/bash

read -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,重启

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值