OS + Linux Shell Programme / 100 cases

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.

实时监控本机内存和硬盘剩余空间,剩余内存小于 500M、根分区剩余空间小于 1000M 时,发送报警邮件给root 管理员.

原文地址:https://www.cnblogs.com/lindows/p/15648861.html