1.编写部署yum仓库的脚本
vim 1.sh
#!/bin/bash
rm -rf /etc/yum.repos.d/*.repo
echo “[xxx] #可以改变
name=xxx
baseurl=file:///mnt #注意写自己镜像挂载路径
enabled=1
gpgcheck=0” > /etc/yum.repos.d/xxx.repo
#保存退出
bash vim 2.sh
2.编写部署ftp服务的脚本
vim 2.sh
#!/bin/bash
yum -y install vsftpd &> /dev/null #将装包显示扔到黑洞里,不显示输出
systemctl restart vsftpd
systemctl enable vsftpd #开机自启
#保存退出
bash vim 2.sh
3.非交互式修改用户密码
vi 3.sh
#!/bin/bash
useradd xyz
echo 123 | passwd --stdin xyz
#只能更改用户xyz的密码为123
bash vim 3.sh
vi 3.sh
#!/bin/bash
useradd $1 #任意用户
echo $2 | passwd --stdin $1 #更改任意用户,任意密码
bash vim 3.sh
vi 3.sh
#!/bin/bash
read -p “请输入用户名” u
#read从键盘获取变量值 -p说明目的 u可以自定义
useradd $u
stty -echo #屏蔽回显,使输入的密码不可见
read -p “请输入密码” p
stty echo #还原
echo $p | passwd --stdin $u
bash vim 3.sh
4.编写脚本,每2分钟检测服务器登录的账户数量,如果超过了3人,发邮件给管理员报警
vi 4.sh
#!/bin/bash
u=$ (who | wc -l)
[$ u -gt 3] && echo “有人攻击服务器~ 当前登录账户数量是$u个” | mail -s test root
#-gt 是大于 &&是逻辑符(前一个指令执行成功才会执行下一个)
#mail -s test roor 发送邮件给root,标题是test
#保存退出
交给计划任务
chmod +x /路径/4.sh
crontable
- /2 * * * *
bash 4.sh
5.编写ping IP的脚本
vi .5.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 1 192.168.2.11 &> /dev/null #ping IP3次,并扔黑洞
if [$? -eq 0]; then #判断上一个任务结果是0,则执行
echo “通了”
else #否则执行
echo “未通”
fi
bash 5.sh
6.编写一个随机数
vi .6.sh
#!/bin/bash
r=$[RANDOM%10] #主机定义随机数 最大为9
read -p “请输入一个数字 (0-9)” n #用户定义随机数
if [ $r -eq $u ] ; then
echo “恭喜猜对了”
elif [ $r -gt $n ];then
echo “猜小了”
else #最后一种情况
echo “猜大了”
fi
bash 6.sh
7.使用for循环+if的嵌套组合,实现对批量主机的ping测试
vi 7.text
#!/bin/bash
for i in {1…10}
do
ping -c 3 -i 0.2 -W 1 192.168.2.$i &>/dev/null # -c定义ping次数 -i定义ping间隔时间,单位秒。 -W如果不通,多久反馈结果,单位秒。
if [ $? -eq 0 ] ; then
echo “192.168.2. $i通了”
else
echo “192.168.2. $i不通”
fi
done
bash 7.sh
8.猜数字
vi 8.sh
#!/bin/bash
r=$[RANDOM%100] #主机定义随机数 最大为99
while [ 0 -eq $UID ]
do
read -p “请输入一个数字 (0-99)” n
if [ $r -eq $n ]; then
echo “恭喜。猜对了”
exit
elif [ $r -gt $n ]; then
echo “猜大了”
else
echo “猜大了”
fi
done
bash 8.sh
9.case的使用
case 变量名 in
模式1)
指令1 ;;
模式2)
指令2 ;;
*)
指令
esac
vi 9.sh
#!/bin/bash
case $1 in
abc) #如果$1的值是abc,就执行第1个指令
echo 123;;
xyz)
echo “456” #如果$1的值是xyz,就执行第2个指令
*);; #如果$1的值不是abc或xyz,就执行第3个指令
echo “请输入abc或xyz”
esac
bash 9.sh
10.使用case编写方便控制nginx的脚本
vi 10.sh
#!/bin/bash
case $1 in
start)
/usr/local/nginx/sbin/nginx;;
re)
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx;;
status)
netstat -ntulp | grep -q nginx #-q表示查询内容不显示
[ $? -eq 0 ] && echo “nginx已开启” || echo “nginx未开启”;;
*)
echo “start | stop | re”
esac
bash 10.sh
15.使用字符串截取功能,随机截取一个字符
vi 15.sh
#!/bin/bash
x=qwertyuiop
n=$[RANDOM%11]
echo ${x:n:1}
#字符串截取,格式 ${变量名:起始位置:长度} 起始位置是从0开始
bash 15.sh
16.编写获取8个随机字符(一个随机密码)的脚本
vi 16.sh
#!/bin/bash
x=qwertyuiop
fo i in {1…8}
do
n=$[RANDOM%11]
pass= ${x:n:1} # $前不需要空格
pass1= $pass1 $pass # $前不需要空格,将新的内容不断往旧的变量中存储,一直循环8次
done
echo $pass1
bash 16.sh
字符串的删除
------从左往右(掐头) ${变量名#被删除的内容}
------从右往左(去尾) ${变量名%被删除的内容}
17.根据字符串删除的功能,编写批量修改文件扩展名的脚本
vi 17.sh
#!/bin/bash
for i in ls *.txt
# 反撇号 获取命令执行的结果.找到.txt结尾的文件,交给for循环处理,找到几个这样的文件,就执行循环任务几次
do
n = ${ i%.*} # $前不需要空格,去尾,删除扩展名,留下文件名
mv $i $n.doc #将源文件修改成 文件名+.doc
done
bash 17.sh
改良版
vi 17.sh
#!/bin/bash
for i in ls *.$1
do
n= ${i%.*}
mv $i $n.$2
done