题要:本文与该链接结合初学者适用:https://blog.csdn.net/kali_yao/article/details/119970869?spm=1001.2014.3001.5502
后期会不间断的写入脚本,记的关注哦
1.搭建yum
#!/bin/bash
#部署yum仓库
mount /dev/cdrom /mydvd
rm -rf /etc/yum.repos.d/*.repo
echo "[abc] //这里由于喊出的内容是有换行所以要用引号
name=xxx
baseurl=file:///mydvd
enabled=1
gpgcheck=0" > /etc/yum.repos.d/abc.repo //最后使用重定向保存到yum配置文件中
2.安装apache服务
#!/bin/bash
yum -y install httpd //装包
echo "web-test~~~" > /var/www/html/index.html //定义主页内容
systemctl restart httpd //开服务
systemctl enable httpd //设置开机自启
3.安装ftp服务
yum -y install vsftpd &> /dev/null //安装ftp,不显示任何信息
systemctl restart vsftpd
systemctl enable vsftpd
dev下的null相当于黑洞,不需要的信息都可以扔到里面让其消失。
4.创建用户及密码
#!/bin/bash
useradd $1 //使用位置变量$1,在执行脚本时灵活定义用户名
echo "$2" | passwd --stdin $1 //使用位置变量$2定义密码
5.使用read指令,以交互式使用脚本
#!/bin/bash
read -p "请输入用户名称:" n //使用变量n存储用户敲的名字 (-p就是你要输入什么交互式的指令)
useradd $n
read -p "请输入密码:" m //使用变量m存储用户敲的密码
echo "$m" | passwd --stdin $n
6.再次改良脚本
#!/bin/bash
read -p "请输入用户名称:" n
useradd $n
stty -echo
read -p "请输入密码:" m
echo
stty echo
echo "$m" | passwd --stdin $n
7.条件测试及逻辑符号
#!/bin/bash
[ $USER == root ] || exit //如果用户不是管理员就退出
[ $USER != root ] && exit //效果同上,另一种写法
yum -y install vsftpd
systemctl restart vsftpd
systemctl enable vsftpd
8.创建用户(read交互式条件测试及逻辑符运用)
#!/bin/bash
read -p "请输入用户名称:" n
[ -z $n ] && echo "你倒是给个名字阿!" && exit //判断用户名为空的话就退出脚本
useradd $n
stty -echo
read -p "请输入密码:" m
echo
stty echo
echo "$m" | passwd --stdin $n
9.编写脚本,每2分钟检查服务器登录账户数量,如果超过3人 发邮件通知管理员
vim test01.sh
#!/bin/bash
n=$(who | wc -l) //n里面存储了登录数量
[ $n -gt 3 ] && echo "服务器被入侵!可能牛老师来了!" | mail -s test root
//用n和3对比,如果超过3就发邮件
chmod +x test01.sh //脚本写完后,赋予x权限
crontab -e //编写计划任务
*/2 * * * * /opt/test01.sh //每2分钟执行脚本,然后保存退出
只要目前超过3人登录系统,那么每隔2分钟就会收到邮件,使用mail命令
查看邮件
10.if测试网络联通性
#!/bin/bash
ping -c 3 -i 0.2 -W 1 $1 &> /dev/null
if [ $? -eq 0 ];then
echo "通了!"
else
echo "不通!"
fi
11.if多分支测试输入成绩测试
#!/bin/bash
read -p "期末考试成绩如何?" n
if [ $n -ge 90 ];then
echo "优秀!"
elif [ $n -ge 80 ];then
echo "良好!"
elif [ $n -ge 60 ];then
echo "及格!"
else
echo "晚上没饭了!"
fi
12.for循环ping网络
#!/bin/bash
x=0
y=0
for i in {1..15}
do
ping -c 3 -i 0.2 -W 1 192.168.4.$i &> /dev/null
if [ $? -eq 0 ];then
echo "4.$i 通了!"
let x++
else
echo "4.$i 不通!"
let y++
fi
done
echo "$x台通了,$y台不通"
13.猜数脚本
#!/bin/bash
x=$[RANDOM%100] //RANDOM是可以得到随机数的变量,除以100取余数可以得到零到99之间的随机数,并且存到变量x中
y=0 //这里还可以定义猜的次数,一次没猜时是0次
while : //无限循环
do
let y++ //每猜一次,把y+1
read -p "请输入一个整数(0-99):" n //将用户给的数字存到变量n中
if [ $n -eq$x ];then //使用if多分枝加条件测试判断n是否等于x
echo "恭喜!猜对了!猜了$y次" //如果n等于x就喊出这句话
exit
elif [ $n -gt $x ];then //如果n比x大
echo "猜大了!"
else //还有最后一种情况
echo "猜小了!"
fi
done
14.case控制简单的nginx服务
1.配置nginx服务,nginx与httpd一样也是网站服务,但安装和使用方式有所不同
cp lnmp_soft/nginx-1.17.6.tar.gz /opt //拷贝nginx到opt下 cd /opt vim test03.sh #!/bin/bash yum -y install gcc make pcre-devel openssl-devel //安装依赖 tar -xf nginx-1.17.6.tar.gz //释放nginx的tar包 cd nginx-1.17.6 //进入nginx目录 ./configure //配置 make //编译 make install //安装
ls /usr/local/nginx //脚本执行完毕后查看
systemctl stop httpd //关闭之前网站服务
/usr/local/nginx/sbin/nginx //开启nginx
systemctl stop firewalld //关闭防火墙2.使用case分支编写脚本,用来控制nginx服务
#!/bin/bash case $1 in //使用执行脚本后的第1个位置变量作为匹配对象 start|kai|k) //如果$1是start|kai|k中的任意一个就执行下面命令 /usr/local/nginx/sbin/nginx;; //开服务 stop|guan) //如果$1是stop|guan中的任意一个就执行下面命令 /usr/local/nginx/sbin/nginx -s stop;; //关服务 restart|cq) //如果$1是restart|cq中的任意一个就执行下面命令 /usr/local/nginx/sbin/nginx -s stop //先关闭 /usr/local/nginx/sbin/nginx;; //再开启,相当于重启服务 cha|status) netstat -ntulp | grep -q nginx [ $? -eq 0 ] && echo "nginx正在运行。。。" || echo "nginx未开启。。。";; *) echo "请输入start|stop|restart" esac
15.再次将之前脚本改良,加入可以定义颜色的函数,然后下方调用 并且加入判断效果,如果服务已经开启不会报错
#!/bin/bash
c(){ //定义函数名字叫c,可以用来输出不同颜色的内容
echo -e "\033[$1m$2\033[0m"
}
case $1 in
start|kai|k)
netstat -ntulp | grep -q nginx //检测nginx是否开启
[ $? -eq 0 ] && c 32 "nginx已开启" && exit //如果开启就喊出提示并推出
/usr/local/nginx/sbin/nginx;; //如果没开启就正常执行开启任务
stop|guan)
/usr/local/nginx/sbin/nginx -s stop;;
restart|cq)
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx;;
cha|status)
netstat -ntulp | grep -q nginx
[ $? -eq 0 ] && c 32 "nginx正在运行。。。" || c 31 "nginx未开启。。。";;
*)
echo "请输入start|stop|restart"
esac
16.echo一个好玩的脚本
#!/bin/bash
for i in {1..20};
do
for j in {1..50};
do
color=$[RANDOM%7+31]
echo -e "\033[1;${color};5m*\033[0m\c"
done
echo
done
17.编写脚本,实现批量修改文件扩展名
#!/bin/bash
#批量修改扩展名
for i in $(ls *.txt) //找到所有的txt文件交给for循环
do
a=${i%.*} //用去尾的方法删除扩展名
mv $i $a.doc //再将源文件修改为doc的
done
#!/bin/bash
#批量修改扩展名
for i in $(ls *.$1) //要改啥类型的文件用$1位置变量表示
do
a=${i%.*}
mv $i $a.$2 //要改成啥,用$2表示
done
18.倒计时脚本
#!/bin/bash
#功能描述(Description):通过tput定位光标,在屏幕特定位置打印当前的计算机时间.
#使用Ctrl+C中断脚本时显示光标.
trap 'tput cnorm;exit' INT EXIT
#定义数组变量,该数字有9个元素,每行是1个元素,每一个数字占用12列.
#0的数组坐标位置为0-11,1的数组坐标位置为12-23,依此类推.
number=(
' 0000000000 111 2222222222 3333333333 44 44 5555555555 6666666666 777777777 888888888 9999999999 '
' 00 00 11111 22 33 44 44 55 66 77 77 88 88 99 99 '
' 00 00 111111 22 33 44 44 55 66 77 77 88 88 99 99 '
' 00 00 11 22 33 44 44 55 66 77 88 88 99 99 '
' 00 00 11 2222222222 3333333333 44444444444 5555555555 6666666666 77 888888888 9999999999 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 00 00 11 22 33 44 55 66 66 77 88 88 99 '
' 0000000000 1111111111 2222222222 3333333333 44 555555555 6666666666 77 888888888 9999999999 '
)
#获取计算机时间,并分别提取个位和十位数字.
get_time(){
if [ -z "$1" ];then
echo "Usage:$0 倒计时分钟"
exit
fi
sec=$[$1*60]
}
#将数组中的某个数组打印出来.
print_time(){
#从第几个位置开始提取数组元素,0就从0开始,1就从12开始,2就从24开始,依此类推.
begin=$[$1*12]
for i in `seq 0 ${#number[@]}` #0-9的循环.
do
tput cup $[i+5] $2
echo -en "\033[91m${number[i]:$begin:12}\033[0m"
done
}
#依次打印小时,分钟,秒(个位和十位分别打印).
get_time $1
while :
do
[ $sec -lt 0 ] && exit
tput civis #隐藏光标.
tput clear
tput cup 3 16
echo "倒计时:"
for j in `seq ${#sec}`
do
num=`echo $sec | cut -c $j`
y=$[j*16]
print_time $num $y
done
let sec--
echo
sleep 1
done
19.国际象棋背景
#!/bin/bash
color1='\033[46m \033[0m'
color2='\033[47m \033[0m'
for i in {1..8};do
for k in {1..2};do
if [ $[i%2] -eq 0 ];then
for j in {1..4};do
echo -en "$color1$color2"
done
else
for j in {1..4};do
echo -en "$color2$color1"
done
fi
echo
done
done
20.
#!/bin/bash
read -p "请输入n值:" num
i=0
while [ $i -le $num ];do
if [ $i -eq 0 ];then
num1=0
echo $num1
elif [ $i -eq 1 ];then
num2=1
echo $num2
else
tmp=$num2
let num2+=num1
num1=$tmp
echo $num2
fi
let i++
done
21.可以查看各种服务器的信息
#!/bin/bash
while :
do
clear //清屏
ifconfig eth0 | awk '/RX p/{print "服务器eth0网卡的接收流量是"$5"字节"}'
ifconfig eth0 | awk '/TX p/{print "服务器eth0网卡的发送流量是"$5"字节"}'
df -h | awk '/\/$/{print "根分区剩余容量是"$4}'
awk 'END{print "服务器账户总数是"NR"个"}' /etc/passwd
echo "当前已登陆账户数量是$(who | wc -l)个"
free -h | awk '/^Mem:/{print "服务器内存剩余容量是"$4}'
uptime | awk '{print "cpu的15分钟平均负载是"$NF}'
echo "服务器安装软件包数量是$(rpm -qa | wc -l)个"
sleep 3 //休息3秒
done
22.双色球
#!/bin/bash
#7个球,6个红球,红球号码1-33中不能重复,1个蓝球,1-16抽
red_ball=""
blue_ball=""
read -p "红球个数:" aa
read -p "蓝球个数:" bb
while :
do
clear
echo "红球个数:$aa"
echo "蓝球个数:$bb"
echo "双色球开奖"
tmp=$[RANDOM%33+1]
echo "$red_ball " | grep -q -w $tmp && continue
red_ball+=" $tmp"
echo -en "\033[31m$red_ball\033[0m"
word=$(echo "$red_ball" | wc -w)
if [ $word -eq $aa ];then
while :
do
clear
tmp2=$[RANDOM%16+1]
echo "$blue_ball" | grep -w -q $tmp && continue
blue_ball+=" $tmp2"
echo "红球个数:$aa"
echo "蓝球个数:$bb"
echo "双色球开奖"
echo -en "\033[31m$red_ball\033[0m"
echo -e "\033[32m$blue_ball\033[0m"
word2=$(echo "$blue_ball" | wc -w)
if [ $word2 -eq $bb ];then
exit
fi
sleep 1
done
fi
sleep 1
done