s
菜鸟教程在线编辑器
https://www.runoob.com/try/runcode.php?filename=helloworld&type=bash
shell脚本100例 + Shell脚本编程实战100例 中文pdf版
https://www.jb51.net/books/723839.html#downintro2
https://dqunying2.jb51.net/202005/books/shellscript_jb51.rar
案例1 ,编写helloworld脚本
#!/bin/bash echo "hello world"
案例2,通过位置变量创建 Linux 系统账户及密码
https://www.cnblogs.com/Zrecret/p/12160219.html
[root@ localhost ~]# vim useradd.sh #!/bin/bash #$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 useradd "$1" echo "$2" | passwd --stdin "$1" #执行脚本 [root@ localhost ~]# ./useradd.sh tom 123 Changing password for user tom. passwd: all authentication tokens updated successfully.
案例3,每周 5 使用 tar 命令备份/var/log 下的所有日志文件
#vim /root/logbak.sh #编写备份脚本,备份后的文件名包含日期标签,防止后面的备份将前面的备份数据覆盖 #注意 date 命令需要使用反引号括起来,反引号在键盘<tab>键上面 tar -czf log-`date +%Y%m%d`.tar.gz /var/log # ======在输入crontab -e进入定时器编辑定时任务========================
# crontab -e #编写计划任务,执行备份脚本 00 03 * * 5 /root/logbak.sh
案例4,一键部署LNMP(RPM版本)
#!/bin/bash #使用 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 systemctl start mariadb systemctl enable httpd systemctl enable mariadb
案例5, 实时监控本机内存和硬盘剩余空间,剩余内存小于 500M、根分区剩余空间小于 1000M 时,发送报警邮件给root 管理员.
#!/bin/bash #提取根分区剩余空间 disk_size=$(df -h / | awk '/\//{print $4}') #提取内存剩余空间 disk_size=$(df -h / | awk '/\//{print $4}') while : do #注意内存和磁盘提取的空间大小都是以 Kb 为单位 if[ $disk_size -le 512000 -a $mem_size -le 1024000 ];then mail -s Warning root <<EOF Insufficient resources,资源不足 EOF fi done
或
#!/bin/bash disk_size=$(df / | awk '/\//{print $4}') men_size=$(free | awk '/Mem/{print $4}') myemail='admin@qq.com' while true do if [ $disk_size -le 512000 -a $men_size -le 1024000 ]; then echo "空间不足!!" | mutt-s "空间不足!!" $myemail else echo "一切正常!!" fi done
shell下RANDOM的用法
http://blog.sina.com.cn/s/blog_88f05dbd0102wzhq.html
RANDOM是一个环境变量,默认情况下,可以随机生成一个0-32767的数,用法如下:
[root@sftssitapp510 ~]# echo $RANDOM
8531
#生成0-20之间的随机数
[root@sftssitapp510 ~]# echo $((RANDOM%20))
#生成12-30之间的数
[root@sftssitapp510 ~]# echo $((RANDOM%18+12))
shell 之 EQ,NE,GT,LT,GE,LE 含义
https://www.cnblogs.com/dw-date/p/13695143.html
EQ 就是 EQUAL等于
NE就是 NOT EQUAL不等于
GT 就是 GREATER THAN大于
LT 就是 LESS THAN小于
GE 就是 GREATER THAN OR EQUAL 大于等于
LE 就是 LESS THAN OR EQUAL 小于等于
shell-case多条件判断语句
https://www.cnblogs.com/hxlinux/p/12939961.html
case 变量名 in #对变量进行判断 变量值1) #当变量名的值是变量值1时,依次输出命令1,命令2 命令1 命令2 命令n;; 变量值2) 命令1 命令2 命令n;; 变量值3) 命令1 .... 命令n;; esac #结束标记
==
#!/bin/bash echo '输入用户名:(例如老王)' read user echo case $user in zhangsan) echo -e "姓名:张三\n外号:法外狂徒\n年龄:十七\n擅长:无恶不作,无中生有,无语无语,无可救药\n职业:刑法演示家";; laowang) echo -e "姓名:老王,\n外号:寡妇终结者,中国好邻居\n擅长:辣手摧黄花做绿帽使者\n职业:人体构造学工程师";; *) echo "暂无收录" esac
shell脚本游戏之:剪刀石头布
https://blog.51cto.com/oldpan/1968398
#!/bin/bash # 计算机定义0~2的取值变量,代表石头、剪刀、布 num=$[RANDOM%3] #game=(石头 剪刀 布) #computer=${game[$num]} #计算机出拳的可能性保存在一个数组中,game[0],game[1],game[2]分别是3种不同的可能,代表石头、剪刀、布 echo "请根据下列提示选择您的出拳手势" echo "玩家人定义:1.石头" echo "玩家人定义:2.剪刀" echo "玩家人定义:3.布"
echo "=============================="
echo "计算机定义:0.石头" echo "计算机定义:1.剪刀" echo "计算机定义:2.布" echo "==============================" read -p "玩家选择:请输入1-3数值:" person #提示用户出拳,根据提示出拳即可 #再通过case语句判断用户输入的值是1还是2还是3,根据不同的输入判断不同的结果 #echo "计算机出:$computer" case $person in 1) if [ $num -eq 0 ];then echo "打印计算机出拳 $num , 平局" elif [ $num -eq 1 ];then echo "打印计算机出拳 $num ,你赢" else echo "打印计算机出拳 $num,计算机赢" 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,2,3" esac
方法二,定义了两个变量,一个是机器出的定义了y, 用户的定义为了x,然后做出三种判断
https://blog.51cto.com/u_13589092/2066024
#!/bin/bash num=$[RANDOM%3+1] case $num in 1) y=“石头”;; 2) y=“剪刀”;; 3) y=“布”;; esac read -p “请输入石头、剪刀、布 :” x echo “机器出的是 : $y” echo “你 出的 是 : $x” if [ $x == $y ];then echo “平手” elif [[ $x == “石头” && $y == “剪刀” ]] || [[ $x == “剪刀” && $y == “布” ]] || [[ $x == “布” && $y == “石头” ]];then echo “你赢了” else echo “你输了” fi
shell 石头剪刀布
https://www.cnblogs.com/loganSxb/p/11079034.html
https://www.cnblogs.com/MR-ws/p/11084774.html
我们来做一个小游戏: 石头剪刀布
首先我们规定一下规则:
1.用户输入一个代表石头剪刀布的数值,与电脑随机生成的数值比较
2.只有用户赢了才能退出游戏
1 #!/bin/bash 2 3 arryas=(剪刀 石头 布) 4 while true 5 do 6 num=$(($RANDOM%3)) 7 8 9 read -p "输入编号: 0.剪刀 1.石头 2.布" username 10 11 echo -e "你出的${arryas[$username]} VS 电脑出的${arryas[$num]}\n" 12 13 dd=$(($username-$num)) 14 if [ $dd -eq 1 -o $dd -eq -2 ] 15 then 16 echo "你赢了" 17 exit 18 elif [ $dd -eq 0 ] 19 then 20 echo "平局" 21 else 22 echo "你输了" 23 fi 24 done
测试:
[root@logan day4]# bash sjb.sh 输入编号: 0.剪刀 1.石头 2.布1 你出的石头 VS 电脑出的布 你输了 输入编号: 0.剪刀 1.石头 2.布2 你出的布 VS 电脑出的布 平局 输入编号: 0.剪刀 1.石头 2.布1 你出的石头 VS 电脑出的石头 平局 输入编号: 0.剪刀 1.石头 2.布0 你出的剪刀 VS 电脑出的布 你赢了 [root@logan day4]#
完成
end
[root@ localhost ~]# vim useradd.sh #!/bin/bash #$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数 useradd "$1" echo "$2" | passwd --stdin "$1" #执行脚本 [root@ localhost ~]# ./useradd.sh tom 123 Changing password for user tom. passwd: all authentication tokens updated successfully.