目录
shell 的变量
系统变量
特殊变量
运算符
if 选择结构 ---then 独立一行
case 语句 等值判断
上机练习 10
附加题
for 循环
while 循环
乘法表(双层嵌套)
上机练习 11
把附加题代码修改为循环形式
# 1. 编写脚本,将系统日志文件(/var/log/messages),拷贝到/root/文件夹中 # cp /var/log/messages /root/ # 2. 编写脚本,通过位置参数传入学生的姓名和班级,打印“我的名字叫 xx,我 的班级是 # xx 班”# sname="ShiHaiHong" # class="60" # echo "我的名字叫${sname},我的班级是${class}班" # 3. 用 if,写一个 shell 脚本,运行时输入一个数字,如果是 666 则输出 evil, 如果是 777 则 # 输出 lucky, 如果是其他则输出 human。 # read -p "输入一个数字:" number # if [ $number == 666 ] # then # echo "evil" # elif [ $number -eq 777 ] # then # echo "lucky" # else echo "human" # fi # 4. 用 case 方法改写上面的功能。 # read -p "输入一个数字:" number # case $number in # "666") # echo "evil" # ;; # "777") # echo "lucky" # ;; # *) # echo "human" # ;; # esac # 5. 判断/root/hosts 是否是存在并且是普通文件,如果不存在则新建一个,如果 已经存 # 在,则追加写入当前时间到此文件中 # if [ -f /root/hosts.txt ] # then # date>>/root/hosts.txt # else # touch /root/hosts.txt # fi # 6. 判断当前用户是否为 root,如果不是则打印非 root 账号,是的话就执行 ifconfig 查看 # 网卡信息($USER 获取当前用户) # if [ $USER == "root" ] # then # ifconfig # else# echo $USER # fi # 7. 编写脚本判断 mysql 是否正常启动(端口号 3306,查看端口 netstat -nltp,然 后 grep 过 # 滤返回行数,判断行数是否大于 0) # if [ $(netstat -nltp | grep -c "3306") -gt 0 ] # then # echo "mysql 已正常启动" # else # echo "mysql 还未开启" # fi # 8. 位置参数传递一个绝对路径的文件,添加所有人可执行权限且提示添加执行 权限成 # 功,如果没有传递参数提示没有传递文件,如果传递的文件不存在则先创建再 赋权。 # read -p "填写一个文件" dir # if [ $# -eq 0 ] # then # echo "没有传递文件" # fi # if [ -f $dir ] # then # echo "确实有这个文件,正在赋权" # chmod a+x $dir # else # echo "文件不存在,自行创建" # touch $dir # chmod a+x $dir # fi # 9. 首先显示当天日期, 然后查找给定的用户是否在系统中工作(cat /etc/passwd)。 # 如果在系统中,就输出一条欢迎语句(例如 hello,root!);如果不在系统中, 就 # 输出一条语句(waiting for root!) # date # read -p "用户名称:" suser # if [ $(cat /etc/passwd | grep "$suser" | wc -l) -gt 0 ] # then # echo "hello,root!" # else # echo "waiting for root!" # fi # 10. 接受一个参数,若给定参数不是目录, 则给出提示信息;# 否则使用 ls -l 命令列出该目录下的内容,并输出有多少个子目录(d 开头), 多少 # 个普通文件(-开头)。显示示例如下: # 目录的数量:16 # 文件的数量:25 # read -p "输入参数" dir # if [ -d $dir ] # then # ls -l $dir # echo "目录的数量:$(ls -l $dir|grep -c "^d")" # echo "文件的数量:$(ls -l $dir|grep -c "^-")" # else # echo "这不是目录" # fi #制作一个猜拳游戏 # read -p "请出拳(石头,剪刀,布):" hand # if [ $hand == "石头" -o $hand == "剪刀" -o $hand == "布" ] # then # echo "玩家:$hand" # echo -n "电脑:" # if [ $RANDOM -ge 0 -a $RANDOM -le 11000 ] # then # computer="剪刀" # elif [ $RANDOM -ge 11001 -a $RANDOM -le 22000 ] # then # computer="石头" # elif [ $RANDOM -ge 22001 -a $RANDOM -le 32767 ] # then # computer="布" # fi # echo $computer # if [ $computer == $hand ] # then # echo "平局" # elif [ $computer == "剪刀" -a $hand == "布" -o $computer == "石头" -a $hand == "剪刀" -o $computer == "布" -a $hand == "石头" ] # then # echo "电脑赢" # elif [ $computer == "布" -a $hand == "剪刀" -o $computer == "剪刀" -a $hand == "石头" -o $computer == "石头" -a $hand == "布" ] # then # echo "玩家赢"# fi # else # echo "不要作弊" # fi # 1.鸡兔同笼(同前面 PLSQL 的题目,DAY13) # for chicken in `seq 0 35` # do # rabbit=$((35 - $chicken)) # if [ $(($rabbit*4 + $chicken*2)) -eq 94 ] # then # echo "共有${chicken}只鸡,${rabbit}只兔" # fi # done # 2.猴子吃桃(同前面 PLSQL 的题目,DAY13) # pea=1 # for day in `seq 1 10` # do # pea=$((2 * ($pea+1))) # done # echo "有${pea}个桃子" # 3.创建用户组 wanmei,批量建立用户 wm1 到 wm9,用户属于 wanmei 组,创建完 成查 # 看/etc/group 和 /etc/passwd 文件 ##groupadd wanmei # for i in `seq 1 9` # do # useradd -g wanmei "wm$i" # done#终端查看 #cat /etc/group #cat /etc/passwd # 4.删除上面的用户和用户组 # for i in `seq 1 9` # do # userdel "wm$i" # done # groupdel wanmei # 5.实现传入一个目录作为参数,如果传入的不是目录则提示不是目录,如果是 目录则将 # 该目录下所有的普通文件的文件名都罗列出来 # if [ -d $1 ] # then # ls -l $1 | grep "^-" # else # echo "不是目录" # fi # 方法二 # if [ -d $1 ] # then # for i in `ls $1` # do # if [ -f "$1/$i" ] # then # echo $i # fi # done # else # echo "不是目录" # fi # 6.猜数字游戏:电脑随机产生一个 100 以内的数字(1-99),通过每次键盘输 入来猜数 # 字,输入的小了就提示往大猜,输入大了就提示往小里猜, 直到输入正确数 字(通过 # $RANDOM 获取随机数) # ComputerNumber=$(($RANDOM % 99 + 1)) # read -p "猜猜看呐" no # if [ $no -ge 1 -a $no -le 99 ] # then # while [ $no != $ComputerNumber ] # do # if [ $no -lt $ComputerNumber ]# then # read -p "猜小了,再试一遍吧" no # elif [ $no -gt $ComputerNumber ] # then # read -p "猜大了,再试一遍吧" no # elif [ $no -gt 99 -o $no -lt 1 ] # then # read -p "数字不在范围内啊!" no # fi # done # echo "你终于答对了,恭喜!" # else # echo "不是数字或数字过大!" # fi # 7.查看 100 到 200 以内素数并统计素数的个数 # count=0 # for i in `seq 100 200` # do # flag=true # for j in `seq 2 $(($i-1))` # do # if [ $(($i%$j)) -eq 0 ] # then # flag=false # break # fi # done # if [ $flag == true ] # then # echo $i # count=$(($count+1)) # fi # done # echo "有${count}个素数" # read -p "来玩猜拳吗?(y/n)" wan # while [ $wan == 'y' ] # do # read -p "请出拳(石头,剪刀,布,我不玩了):" hand # if [ $hand == "我不玩了" ] # then # break # elif [ $hand == "石头" -o $hand == "剪刀" -o $hand == "布" ]# then # echo "玩家:$hand" # echo -n "电脑:" # if [ $RANDOM -ge 0 -a $RANDOM -le 11000 ] # then # computer="剪刀" # elif [ $RANDOM -ge 11001 -a $RANDOM -le 22000 ] # then # computer="石头" # elif [ $RANDOM -ge 22001 -a $RANDOM -le 32767 ] # then # computer="布" # fi # echo $computer # if [ $computer == $hand ] # then # echo "平局" # elif [ $computer == "剪刀" -a $hand == "布" -o $computer == "石头" -a $hand == "剪刀" -o $computer == "布" -a $hand == "石头" ] # then # echo "电脑赢" # elif [ $computer == "布" -a $hand == "剪刀" -o $computer == "剪刀" -a $hand == "石头" -o $computer == "石头" -a $hand == "布" ] # then # echo "玩家赢" # fi # else # echo "不要作弊" # fi # done # echo "下次再会~" 需要使用代码请自行消去注释。(ctrl+/)
吐槽一下,这个 shell 脚本语法规则真的古怪,琢磨死人了!!!