shell编程100例1、编写hello world脚本
#!/bin/bash
# 编写hello world脚本
echo "Hello World!"
2、通过位置变量创建 Linux 系统账户及密码
#!/bin/bash
# 通过位置变量创建 Linux 系统账户及密码
#$1 是执⾏脚本的第⼀个参数,$2 是执⾏脚本的第⼆个参数
useradd    "$1"
echo "$2"  |  passwd  ‐‐stdin  "$1"
3、备份⽇志
#!/bin/bash
# 每周 5 使⽤ tar 命令备份/var/log 下的所有⽇志⽂件
# vim  /root/logbak.sh
# 编写备份脚本,备份后的⽂件名包含⽇期标签,防⽌后⾯的备份将前⾯的备份数据覆盖
# 注意 date 命令需要使⽤反引号括起来,反引号在键盘<tab>键上⾯
tar -czf log-`date +%Y%m%d`. /var/log
# crontab ‐e #编写计划任务,执⾏备份脚本
00 03 * * 5 /root/logbak.sh
4、⼀键部署 LNMP(RPM 包版本)
#!/bin/bash
# ⼀键部署 LNMP(RPM 包版本)
# 使⽤ yum 安装部署 LNMP,需要提前配置好 yum 源,否则该脚本会失败
# 本脚本使⽤于 centos7.2 或 RHEL7.2
yum ‐y install httpd
yum ‐y install mariadb mariadb‐devel mariadb‐server
yum ‐y install php  php‐mysql
systemctl start httpd mariadb
systemctl enable httpd mariadb
5、监控内存和磁盘容量,⼩于给定值时报警
# 实时监控本机内存和硬盘剩余空间,剩余内存⼩于500M、根分区剩余空间⼩于1000M时,发送报警邮件给root管理员
# 提取根分区剩余空间
disk_size=$(df / | awk '/\//{print $4}')
# 提取内存剩余空间
mem_size=$(free | awk '/Mem/{print $4}')
while :
do
# 注意内存和磁盘提取的空间⼤⼩都是以 Kb 为单位
if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
then
mail  ‐s  "Warning"  root  <<EOF
Insufficient resources,资源不⾜
EOF
shell创建文件并写入内容fi
done
6、猜数字游戏
#!/bin/bash
# 脚本⽣成⼀个 100 以内的随机数,提⽰⽤户猜数字,根据⽤户的输⼊,提⽰⽤户猜对了,
# 猜⼩了或猜⼤了,直⾄⽤户猜对脚本结束。
# RANDOM 为系统⾃带的系统变量,值为 0‐32767的随机数
# 使⽤取余算法将随机数变为 1‐100 的随机数
num=$[RANDOM%100+1]
echo "$num"
# 使⽤ read 提⽰⽤户猜数字
# 使⽤ if 判断⽤户猜数字的⼤⼩关系:‐eq(等于),‐ne(不等于),‐gt(⼤于),‐ge(⼤于等于),
# ‐lt(⼩于),‐le(⼩于等于)
while  :
do
read -p "计算机⽣成了⼀个 1‐100 的随机数,你猜: " cai
if [ $cai -eq $num ]
then
echo "恭喜,猜对了"
exit
elif [ $cai -gt $num ]
then
echo "Oops,猜⼤了"
else
echo "Oops,猜⼩了"
fi
done
7、检测本机当前⽤户是否为超级管理员,如果是管理员,则使⽤ yum 安装 vsftpd,如果不是,则提⽰您⾮管理员(使⽤字串对⽐版本)
# 检测本机当前⽤户是否为超级管理员,如果是管理员,则使⽤ yum 安装 vsftpd,如果不
# 是,则提⽰您⾮管理员(使⽤字串对⽐版本)
if [ $USER == "root" ]
then
yum ‐y install vsftpd
else
echo "您不是管理员,没有权限安装软件"
fi
8、检测本机当前⽤户是否为超级管理员,如果是管理员,则使⽤ yum 安装 vsftpd,如果不是,则提⽰您⾮管理员(使⽤ UID 数字对⽐版本)
#!/bin/bash
# 检测本机当前⽤户是否为超级管理员,如果是管理员,则使⽤ yum 安装 vsftpd,如果不
# 是,则提⽰您⾮管理员(使⽤ UID 数字对⽐版本)
if [ $UID -eq 0 ];then
yum ‐y install vsftpd
else
echo "您不是管理员,没有权限安装软件"
fi
9、编写脚本:提⽰⽤户输⼊⽤户名和密码,脚本⾃动创建相应的账户及配置密码。如果⽤户不输⼊账户名,则提⽰必须输⼊账户名并退出脚本;如果⽤户不输⼊密码,则统⼀使⽤默认的 123456 作为默认密码。
#!/bin/bash
# 编写脚本:提⽰⽤户输⼊⽤户名和密码,脚本⾃动创建相应的账户及配置密码。如果⽤户
# 不输⼊账户名,则提⽰必须输⼊账户名并退出脚本;如果⽤户不输⼊密码,则统⼀使⽤默
# 认的 123456 作为默认密码。
read -p "请输⼊⽤户名: " user
#使⽤‐z 可以判断⼀个变量是否为空,如果为空,提⽰⽤户必须输⼊账户名,并退出脚本,退出码为 2
#没有输⼊⽤户名脚本退出后,使⽤$?查看的返回码为 2
if [ -z $user ];then
echo "您不需输⼊账户名"
exit 2
fi
#使⽤ stty ‐echo 关闭 shell 的回显功能
#使⽤ stty  echo 打开 shell 的回显功能
stty -echo
read -p "请输⼊密码: " pass
stty echo
pass=${pass:‐123456}
useradd "$user"
echo "$pass" | passwd ‐‐stdin "$user"
10、输⼊三个数并进⾏升序排序
# 依次提⽰⽤户输⼊ 3 个整数,脚本根据数字⼤⼩依次排序输出 3 个数字
read -p "请输⼊⼀个整数:" num1
read -p "请输⼊⼀个整数:" num2
read -p "请输⼊⼀个整数:" num3
# 不管谁⼤谁⼩,最后都打印 echo "$num1,$num2,$num3"
# num1 中永远存最⼩的值,num2 中永远存中间值,num3 永远存最⼤值
# 如果输⼊的不是这样的顺序,则改变数的存储顺序,如:可以将 num1 和 num2 的值对调tmp=0
# 如果 num1 ⼤于 num2,就把 num1 和和 num2 的值对调,确保 num1 变量中存的是最⼩值if [ $num1 -gt $num2 ];then
tmp=$num1
num1=$num2
num2=$tmp
fi
# 如果 num1 ⼤于 num3,就把 num1 和 num3 对调,确保 num1 变量中存的是最⼩值
if [ $num1 -gt $num3 ];then
tmp=$num1
num1=$num3
num3=$tmp
fi
# 如果 num2 ⼤于 num3,就把 num2 和 num3 对标,确保 num2 变量中存的是⼩⼀点的值if [ $num2 -gt $num3 ];then
tmp=$num2
num2=$num3
num3=$tmp
fi
echo "排序后数据(从⼩到⼤)为:$num1,$num2,$num3"
11、⽯头、剪⼑、布游戏
# 编写脚本,实现⼈机<⽯头,剪⼑,布>游戏
game=(⽯头剪⼑布)
num=$[RANDOM%3]
computer=${game[$num]}
# 通过随机数获取计算机的出拳
# 出拳的可能性保存在⼀个数组中,game[0],game[1],game[2]分别是 3 中不同的可能
echo "请根据下列提⽰选择您的出拳⼿势"
echo "1.⽯头"
echo "2.剪⼑"
echo "3.布"
read -p "请选择 1‐3:" person
case  $person  in
1)
if [ $num -eq 0 ]
then
echo "平局"
elif [ $num -eq 1 ]
then
echo "你赢"
else
echo "计算机赢"
fi;;
2)
if [ $num -eq 0 ]
then
echo "计算机赢"
elif [ $num -eq 1 ]
then
echo "平局"
else
echo "你赢"
fi;;
3)
if [ $num -eq 0 ]
then
echo "你赢"
elif [ $num -eq 1 ]
then
echo "计算机赢"
else
echo "平局"
fi;;
*)
echo "必须输⼊ 1‐3 的数字"
esac
12、编写脚本测试 192.168.4.0/24 整个⽹段中哪些主机处于开机状态,哪些主机处于关机状态(for 版本)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。