接上,我们先来回顾下上面章节的最后一题,如果哪个知识点不明白,单独复制到命令行执行试试效果即可.
试着在系统上创建 100 个用户 , 且 给所有用户赋密码 tashi123
#!/bin/bash
for i in `seq -w 001 100`
do
id tashi$i &> /dev/null
if [ $? -ne 0 ];then
useradd tashi$i # 创建用户的命令
echo tashi123 | passwd tashi$i --stdin
fi
done
# seq -w 是为了等位补齐001 到 100 之间 100个三位数 # id 命令查询该用户是否存在,且命令结果输出到垃圾桶,即屏幕不打印 # $?特殊变量实现判断上个命令是否正常执行,0则表示上个用户是存在的 # 不要交互,直接赋密码
8 while
8.1while 语法格式
while [ 条件判断式 ]
do
程序
done
练习1:求1-100之间的和
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
sum=$[ $sum + $i ]
i=$[ $i + 1 ]
done
echo $sum
练习2:系统登录,当用户名为 tashi 密码为 tashi123时,登录成功 , 最多三次机会
#!/bin/bash
read -p "请输入你的用户名: " user
read -p "请输入你的密码: " password
i=1
while [ $i -le 3 ]
do
if [ $user == "tashi" ] && [ $password == "tashi123" ] ;then
echo "登录成功"
break
fi
let i+=1
done
8.2 循环控制语句
continue:跳过本次循环,继续执行下一次循环
for i in `seq 10`
do
if [ $i -eq 3 ]
then
continue
fi
echo $i
done
break:退出循环
for i in `seq 10`
do
if [ $i -eq 3 ]
then
break
fi
echo $i
done
8.3交互输入
read
-p: 指定读取时的提示符号
-t: 指定读取时等待的时间(秒)
#!/bin/bash
read -t 7 -p "请输入你的体温:" name
echo $name
9. 函数
9.1内置函数
系统内置函数,如
basename /opt/zhoumo # 执行结果 保留最后一节 zhoumo
basename /opt/zhoumo/1.sh # 执行结果 1
dirname /opt/zhoumo/1.sh # 返回路径部分
9.2 自定义函数
语法:
函数的创建方法一:
function 函数名称 {
命令
}
函数的创建方法二:
函数名称() {
命令
}
函数名 -----调用函数的意思
sum(){
s=0
s=$[$1+$2]
echo $s
}
read -p "input your paratemer1: " p1
read -p "input your paratemer2: " p2
sum $p1 $p2
9.3 函数的调用和返回值
调用: 函数名 参数 返回值: return 或者 函数体最后一行的结果
# return 用法
#!/bin/bash
abc(){
num=$1
return $[2*$num]
}
abc $1
# result=`abc 2` # 没有这种用法 , 跟 python中是不一样的, return只能使用 $?获取返回值且只能返回小于等于#255的值,所以实际中很少使用
# echo "函数的返回值是 $result"
echo "函数的返回值是 $?"
# echo 用法
#!/bin/bash
if [ $# -ne 1 ];then # $#判断脚本执行是外部传参 如果 不等于 1 , 给出提示 , 且退出执行
echo "usage: basename $0 par1 "
exit
fi
abc(){
num=$1
echo $[2*$num] # 作为返回值 , 所以很少使用 retun
}
result=`abc $1`
echo "abc的返回值是: $result"
10 三剑客 sed grep awk
10.1 sed
sed 流编辑器,stream editor 可以通过命令对文件的内容作出修改,能够实现自动化.
10.1.1 语法
sed 选项 '操作指令' 文件名 .选项: -i 将操作指令结果保存在文件中,而不是在内存中 -e 可以一次执行多个命令 -n 自动匹配指令的内容 .操作指令 a 在指定位置的下一行插入 i 在指定位置的上一行插入 s 替换 d 删除 p 打印指定内容,一般与sed -n 一起使用
10.1.2 a 新增
1.在第2行的后面增加一行123
sed -i '2a 123' x1.sh ------------------------如果没有-i 123只是增加在内存,文件内容并没有增加
2.在以h开头的行的后面增加一行999
sed -i '/^h/a 999' x1.sh
3.在以e结尾的行的后面增加一行
sed -i '/e$/a 888' x1.sh
4.在包含o的行的后面增加一行
sed -i '/o/a 5555' x1.sh
5.在最后一行的后面增加一行
sed -i '$a 777' x1.sh
6.在每一行后面都增加一行0000-----不指定行号的时候,默认在每一行的后面都增加一行
sed -i 'a 0000' x1.sh
7.在2-4行的后面都增加一行1111
sed -i '2,4a 1111' x1.sh
8.在 hello world 行后面插入 "今天周日"
sed '/hello world/a\今天周六' sed.txt
10.1.3 i 新增
.操作同a相似
1.在第一行插入一行abc
sed -i '1i abc' x1.sh
2.在倒数第二行插入一行
sed -i '$i abc' x1.sh
10.1.4 s 替换
1.替换每一行的第一个abc为aaa
sed -i 's/abc/aaa/' x1.sh
2.替换每一行的每一个abc为aaa
sed -i 's/abc/aaa/g' x1.sh
3.替换1-3行的第一个abc为aaa
sed -i '1,3s/abc/aaa/' x1.sh
4.替换1-3行的每一个abc为aaa
sed -i '1,3s/abc/aaa/g' x1.sh
5.替换最后一行的第一个abc为aaa
sed -i '$s/abc/aaa/' x1.sh
10.1.5 d 删除
1.删除文件的第2行
sed -i '2d' abc
2.删除第3-5行
sed -i '3,5d' abc
3.删除最后一行
sed -i '$d' abc
4.删除12所在的行
sed -i '/12/d' abc
5.删除空白行
sed "/^$/d" sed.txt
10.1.6 p 打印
1.显示文件的第一行
sed -n '1p' abc
2.显示文件的第3-5行
sed -n '3,5p' abc
3.显示文件的最后一行
sed -n '$p' abc
4.显示i所在的行的内容
sed -n '/i/p' abc
10.1.7 -e 多个命令一起操作
先删除第五行再删除第2行
sed -i -e '5d' -e '2d' sed.txt
sed.txt 文件中的第二行删除 , 并将 3 替换为 C
sed -e "2d" -e "s/3/C/g" sed.txt
10.2 grep
grep 常见选项: -n :显示行号 -c :显示次数 -i :忽略大小写 -v :反向查找,也就是筛选 -l : 只打印 文件的名字 1.在文件中查找字段 ---在文件中输出 grep o x1 2.显示某个字段在文件中出现的行的内容以及行号 grep -n o x1 3.统计某个字段在文件中出现的行的次数 grep -c o x1 4.查找某个字段在文件中出现的内容,忽略大小写 grep -i hello x1 5.只查找bash的进程 ---在标准输出中使用 ps -ef|grep bash|grep -v grep 6.查找etc目录下文件的个数 ----结合正则表达式使用 ll /etc|grep -c ^- 7.查找当前目录下 包含 1 的文件 grep -l 1 *
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
最后基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源【免费】。