Shell脚本入门

接上,我们先来回顾下上面章节的最后一题,如果哪个知识点不明白,单独复制到命令行执行试试效果即可.

试着在系统上创建 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自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源【免费】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值