shell练习题
⼀、编写⼀个脚本使我们在写⼀个脚本时⾃动⽣成”#!/bin/bash”这⼀⾏和注释信息。原⽂代码为:
Shell
1 2 3 4 5 6 7 8 9 10#!/bin/bash
if  ! grep "^#!" $1 &>/dev/null; then cat >> $1 << EOF
#!/bin/bash
# Author:
#Date & Time: `date +"%F %T"` #Description:
EOF
fi
vim +5 $1
初学者看到这代码,可能不太会⽤,其实很简单,看到有$1,就表⽰需要带参数来执⾏,所以,这个脚本的执⾏⽅法是:
①、将以上代码保存为shell脚本,⽐如test,
shell代码
②、使⽤chmod加上执⾏权限,chmod +x test
③、执⾏ ./test  newfile 即可看到效果。
Ps:当然也可以不要第②步,直接使⽤ sh test newfile 即可。
执⾏效果如下:
这个脚本对于经常写shell的童鞋就很有⽤,但是忘记带参数执⾏就会卡住不动,⽽且不带路径的话就直接在当前⽬录下⽣成新⽂件,会很乱。所以张⼽就将其改进⼀下,变得更加易⽤:
Shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15#!/bin/bash
if [[ -z "$1" ]];then
newfile=~/newscript_`date +%m%d_%S` else
newfile=$1
fi
if  ! grep "^#!" $newfile &>/dev/null; then cat >> $newfile << EOF
#!/bin/bash
# Author: Inert Your Name here.
#Date & Time: `date +"%F %T"`
#Description: Please Edit here.
EOF
fi
vim +5 $newfile
改进说明:如果未带参数执⾏,将在家⽬录下⽣成带时间戳的新⽂件,避免重复及乱的问题。可将这个脚本改名后直接丢到path路径中,⽐如/bin/addjb  那么你的系统就多了⼀个命令 addjb了,是不是很有趣呢!
时间有限,以下脚本暂时就不做测试、解释或改进了,请先⾃⾏测试吧!有空再来更新。
⼆、任意三个整数,判断最⼤数。
Shell
1 2 3 4 5 6 7 8 9 10 11 12 13#!/bin/bash
echo  "please enter three number:"  read -p "the first number is :" n1
read -p "the second number is:" n2  read -p "the third number is:" n3 let MAX=$n1
if [ $n2 -ge $n1 ]; then
MAX=$n2
fi
if [ $n3 -ge $MAX ]; then
MAX=$n3
fi
echo "the max number is $MAX."
执⾏效果:
注:⾮常简单的逻辑判断脚本,有兴趣的可以改进下,练练⼿。
三、求100以内偶数的和。
⽅法①:
Shell
1 2 3 4 5 6#!/bin/bash
sum=0
for I in {1..50}; do
sum=$(($sum+2*$I)) done
echo "the sum is $sum"
⽅法②:Shell
1 2 3 4 5 6 7 8#!/bin/bash
let SUM=0
for I in $(seq 1 100); do    if [ $[$I%2] == 0 ]; then          let  SUM+=$I
fi
done
echo "the sum is $SUM."
四、利⽤for语句ping C类⽹、ping B类⽹。
①、ping C类⽹:
Shell
1 2 3 4 5 6 7 8 9#!/bin/bash
read -p "C NETWORK:" MYNET
PINGNET=`echo $MYNET | sed 's/\([0-9.]*\)\ .[0-9]*/\1/g'`
let I=1
while [ $I -le 254 ];do
ping –c1 –W1 $PINGNET.$I &>/dev/null
[ $? -eq 0 ] && echo "$PINGNET.$I  online." || echo "$PINGNET.$I offline." let  I++
done
②、ping B类⽹:Shell
1 2 3 4 5 6 7 8 9 10 11 12#!/bin/bash
read -p "B network:" MYNET
PINGNET=`echo $MYNET | sed 's/\([0-9]\{1,3\}\.[0-9]\{1,3\}\)\..*/\1/g'` for P in {0..255}; do
for I in {1..255}; do
if ping -c1 -W2 $PINGNET.$P.$I &>/dev/null; then
echo  "$PINGNET.$P.$I is online."
else
echo "$PINGNET.$P.$I is offline."
fi
done
done
五、提⽰输⼊⼀个⽤户名,判断⽤户是否存在,如果存在,显⽰⼀下⽤户默认的shell。Shell
1 2 3 4 5 6 7 8 9#!bin/bash
read –p "please input a username:"  USER
if cut –d:-f1  /etc/passwd | grep "^$USER$" &> /dev/null ;then MYBASH=`grep  "^$USER:"  /etc/passwd | cut –d :  -f7`
echo "${USER}'s shell is $MYBASH"
else
echo "$USER not exists."
exit  4
fi
六、监控系统登录⼈数,超过四个,显⽰已经达到四个,5S检查⼀下,并退出脚本(exit)
Shell
1 2 3 4 5 6 7 8 9#! /bin/bash
read –p "A user:"  MYUSER
cut –d : -f1 /etc/passwd | grep "^$MYUSER" &> /dev/null || exit 6 let COUNT=`who |  grep "^$MYUSER"  | wc –l`
until [ $COUNT –ge 4 ]; do
sleep 5
let COUNT=`who | grep “^$MYUSER” |  wc -l`
done
echo "$MYUSER loged 4 times."

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