SHELL脚本案例

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
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值