编写脚本,实现批量化修改拓展名
touchabc{1..10}.txt #创建10个文件
vim test01.sh
#!/bin/bash
#批量修改扩展名
fore i in $(ls .txt) #.txt改为$1 可以使用变量修改,(要修改的原名)
do
a=${i%.*}
mv $i $a.doc #doc改为$2 可以使用变量修改,(修改后的名字)
done
优化后为
#!/bin/bash
#批量修改扩展名
for i in $(ls *.$1) //要改啥类型的文件用$1位置变量表示
do
a=${i%.*}
mv $i $a.$2 //要改成啥,用$2表示
done
定义变量初值(备用值)
${变量名:-初值}
#!/bin/bash
read -p "请输入要创建的账户名:" u
useradd $u
read -p "请输入要配置的密码(默认123456):" p
echo ${p:-123456} | passwd --stdin $u #如果没有输入密码直接回车的话密码就是123456
总结
${变量名:} 截取
${变量名/} 替换
${变量名#} 掐头
${变量名%} 去尾
${变量名:-} 定义初值(备用值)
正则表达式,使用若干符号配合某工具对文档进行增删改查等操作
head -5 /etc/passwd > user #准备素材
grep ^root user #找以root开头的行
grep bash$ user #找以bash结尾的行
grep ^$ user #找空行
grep -v ^$ user #显示除了空行的内容
grep "[root]" user #找rot任意一个字符
grep "[rot]" user #效果同上
grep "[^rot]" user #显示r或o或t以外的内容
grep "[0123456789]" user #找所有数字
grep "[0-9]" user #效果同上
grep "[^0-9]" user #显示数字以外内容
grep "[a-z]" user #找所有小写字母
grep "[A-Z]" user #找所有大写字母
grep "[a-Z]" user #找所有字母
grep "[a-Z0-9]" user #找所有字母和数字
grep "[^a-Z0-9]" user #找特殊符号
grep "." user #找任意单个字符,文档中每个字符都可以理解为任意字符
grep "r..t" user #找rt之间有2个任意字符的行
grep "r.t" user #找rt之间有1个任意字符的行,没有匹配内容,就无输出
grep "*" user #错误用法,*号是匹配前一个字符任意次,不能单独使用
grep "ro*t" user #找rt,中间的o有没有都行,有几次都行
grep ".*" user #找任意,包括空行 .与*的组合在正则中相当于通配符的效果
grep "ro\{1,2\}t" user #找rt,中间的o可以有1~2个
grep "ro\{2,6\}t" user #找rt,中间的o可以有2~6个
grep "ro\{2,\}t" user #找rt,中间的o可以有2个以及2个以上
grep "ro\{1,\}t" user #找rt,中间的o可以有1个以及1个以上
grep "ro\{3,\}t" user #找rt,中间的o可以有3个以及3个以上
grep "ro\{2\}t" user #找rt,中间的o必须只有有2个
grep "ro\{1\}t" user #找rt,中间的o必须只有有1个
grep "ro\{3\}t" user #找rt,中间的o必须只有有3个
grep "\(0:\)\{2\}" user #找连续的2个0: 小括号的作用是将字符组合为一个整体
以上命令均可以加-E选项并且去掉所有\,改成扩展正则的用法,比如
grep "ro\{1,\}t" user可以改成 grep -E "ro{1,}t" user
或者
egrep "ro{1,}t" user
grep "ro\{1,\}t" user #使用基本正则找o出现1次以及1次以上
egrep "ro{1,}t" user #使用扩展正则,效果同上,比较精简
egrep "ro+t" user #使用扩展正则,效果同上,最精简
grep "ro\{0,1\}t" user #使用基本正则找o出现0~1次
egrep "ro{0,1}t" user #使用扩展正则,效果同上,比较精简
egrep "ro?t" user #使用扩展正则,效果同上,最精简
egrep "root|^bin" user #找有root或者以bin开头的行
cat aa #素材文件,里面有一些"the"
the
there
the6
the_
123the
egrep "the\b" aa #在aa文件中找the,右边不允许出现数字、字母、下划线
egrep "\bthe\b" aa #找the,两边都不允许出现数字、字母、下划线
sed 流式编辑器,可以对文档进行非交互式增删改查的操作 逐行处理
用法1:前置命令 | sed [选项] '条件指令'
用法2:sed [选项] '条件指令' 文件.. ..
选项:
-n 屏蔽默认输出 -r 支持扩展正则 -i 修改源文件
指令:
p 输出 d 删除 s替换
sed -n 'p' user #输出所有行
sed -n '1p' user #输出第1行
sed -n '2p' user #输出第2行
sed -n '3p' user #输出第3行
sed -n '2,4p' user #输出2~4行
sed -n '2p;4p' user #输出第2行与第4行
sed -n '2,+1p' user #输出第2行以及后面1行
sed -n '/^root/p' user #输出以root开头的行
sed -n '/root/p' user #输出包含root的行
sed -nr '/^root|^bin/p' user
将以上语句中的p指令改为d指令可以实现对应行的删除效果比如sed -n '2p' user 改成 sed '2d' user 是删除第2行
sed -n '2!p' user #输出除了第2行的内容,加!是取反效果
sed '3,+1!d' user #删除第3行、第4行以外的行
sed -n '=' user #显示行号,=号在sed中可以显示行号
sed -n '$=' user #查看文档最后一行的行号,相当于查看文档总行数
sed -i '$d' user #删除文档的最后一行并保存
sed 's/2017/6666/' test.txt #把所有行的第1个2017替换成6666
sed 's/2017/6666/2' test.txt #把所有行的第2个2017替换成6666
sed '1s/2017/6666/' test.txt #把第1行的第1个2017替换成6666
sed '3s/2017/6666/3' test.txt #把第3行的第3个2017替换成6666
sed '3s/2017//3' test.txt #把第3行的第3个2017替换成空,相当于删除
sed '/2024/s/2017/6666/' test.txt #找到有2024的行,将2017替换成6666
尝试将user文档中/bin/bash替换成/sbin/sh
sed '1s//bin/bash//sbin/sh/' user #直接替换,报错
sed '1s/\/bin\/bash/\/sbin\/sh/' user #使用转义符号可以成功,但不方便
sed '1s!/bin/bash!/sbin/sh!' user #最佳方案,更改s的替换符
sed '1s@/bin/bash@/sbin/sh@' user #替换符号可以用所有数字键上的
编写脚本,安装httpd服务,需要使用82号端口开启
#!/bin/bash
yum -y install httpd &> /dev/null
sed -i '/^Listen 80$/s/0/2/' /etc/httpd/conf/httpd.conf #将以Listen 80开头的行的0换成2
systemctl restart httpd
systemctl enable httpd
echo "web-test~~~" > /var/www/html/index.html
setenforce 0 #执行完脚本后,关闭selinux
systemctl stop firewalld #关闭防火墙
curl 192.168.4.7:82 #测试82端口访问页面