一、shell脚本函数运用
函数:可以利用一个名称存储公共的语句块,实现精简脚本方便后期调用的目的。
1.1 书写格式
函数名(){
指令
}
1.2 示例
使用函数修改字符颜色。
[root@test1 ~]# vim hanshu01.sh #创建脚本
#!/bin/bash
a(){ #创建函数,名字叫a
echo -e "\033[$1m$2\033[0m" #输出带颜色的字符
}
a 31 ABCD #调用函数时,后面跟第一个位置变量定义颜色第二个位置变量定义内容
a 32 xyzZ
a 33 EGSD
a 34 ERTY
a 35 BJYQ
[root@test1 ~]# chmod u+x hanshu01.sh #给执行权限
运行以上脚本,就会输出带颜色字体。
[root@test1 ~]# ./hanshu01.sh
二、字符串的处理
2.1 字符串的截取
${变量名称:截取位置:截取长度}
[root@test1 ~]# a=abcd #定义变量
[root@test1 ~]# echo ${a:1:2} #从第二位截取两位
bc
[root@test1 ~]# echo ${a:0:2} #从头截取两位
ab
示例:
编写脚本,可以生成8位随机字符用作密码
注意该脚本用到以下思路:
[root@test1 ~]# c=a$c #首先准备一个变量c作为口袋可以装字符
这里装了一个字符a
[root@test1 ~]# echo $c #看看口袋里
a
[root@test1 ~]# c=6$c #再往口袋里装一个字符6
[root@test1 ~]# echo $c #再看看,口袋里字符越来越多
6a
[root@test1 ~]# c=t$c #再装个字符t
[root@test1 ~]# echo $c #字符又增加了
t6a
编写脚本:
[root@test1 ~]# vim zifuchuan.sh
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
for i in {1..8}
do
n=$[RANDOM%62] #得到0~61随机数存在变量n中
a=${x:n:1} #截取到1个随机字符,存在变量a中
c=$a$c #不断往c中追加,此时c相当于一个袋子
done
echo $c #最后喊出,得到8位长度随机字符串
[root@test1 ~]# chmod u+x zifuchuan.sh #给执行权限
#多次运行脚本,每次生成密码不同
[root@test1 ~]# ./zifuchuan.sh
gWkx7Lb9
[root@test1 ~]# ./zifuchuan.sh
tPdj8Jdo
[root@test1 ~]# ./zifuchuan.sh
JijkPMkP
2.2 字符串替换
${变量名/旧/新}
[root@test1 ~]# a=1234
[root@test1 ~]# echo ${a/2/6} #将1个字符2换成6
1634
[root@test1 ~]# a=112233
[root@test1 ~]# echo ${a/2/6} #将1个字符2换成6
116233
[root@test1 ~]# echo ${a//2/6} #将所有字符2换成6
116633
[root@test1 ~]# a=1122233
[root@test1 ~]# echo ${a/22/66} #换2个
1166233
[root@test1 ~]# echo ${a/11/} #将11替换成空,相当于删除
22233
2.3 字符串的删除
${变量名#要删除的内容} 掐头
${变量名%要删除的内容} 去尾
[root@test1 ~]# a=abcdef #创建变量,作为素材
[root@test1 ~]# echo ${a#abc} #掐头,删除到abc
def
[root@test1 ~]# echo ${a%def} #去尾,删除到def
abc
[root@test1 ~]# echo ${a#abcde} #掐头,删除到abcde
f
[root@test1 ~]# a=abcdefghijk #创建变量,作为素材
[root@test1 ~]# echo ${a#abcdefghi} #掐头,删除到i
jk
[root@test1 ~]# echo ${a#*i} #效果同上,精简写法
jk
[root@test1 ~]# echo ${a%defghijk} #去尾,删除到d
abc
[root@test1 ~]# echo ${a%d*} #效果同上,精简写法
abc
三、定义变量初值
${变量名:-初值}
3.1 示例
用脚本创建用户并设置密码
[root@test1 ~]# vim bianliang.sh
#!/bin/bash
read -p "请输入用户名:" u
[ -z $u ] && echo "必须输入用户名!" && exit
useradd $u
read -p "请输入密码(默认123456):" n
echo ${n:-123456} | passwd --stdin $u
[root@test1 ~]# chmod u+x bianliang.sh
[root@test1 ~]# ./bianliang.sh
请输入用户名:ziha
请输入密码(默认123456):123456
更改用户 ziha 的密码 。
passwd:所有的身份验证令牌已经成功更新。