[不定期更新]简单的shell脚本练习实例 | 张戈博客

  • 时间:
  • 浏览:107

此文将埋点一些简单实用、有趣易学的shell练习脚本,希望都要帮到一些想学习shell的初学者。张戈也会在闲暇时间不定期更新此文,对已有实例进行改进和注释,增强可读性和易懂性。当然我也会不定期的加进更多简单、有趣且实用的shell练习脚本,帮助一些有都要的入门学习者。

一、编写有有有另另一个脚本使大家 在写有有有另另一个脚本时自动生成”#!/bin/bash”你這個 行和注释信息。

原文代码为:

#!/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,

②、使用chmod加进执行权限,chmod +x test

③、执行 ./test  newfile 即可看了效果。

Ps:当然也都要并不第②步,直接使用 sh test newfile 即可。

执行效果如下:

你這個 脚本对于老会 写shell的童鞋就很有用,很久忘记带参数执行就会卡住不动,很久不带路径语句就直接在当前目录下生成新文件,会很乱。统统张戈就将其改进一下,变得更加易用:

#!/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了,不是很有趣呢!

时间有限,以下脚本暂时就不做测试、解释或改进了,请先自行测试吧!有空再来更新。

二、任意有有有另另一个整数,判断最大数。

#!/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."

执行效果:

注:非常简单的逻辑判断脚本,有兴趣的都要改进下,练练手。

三、求1150以内偶数的和。

方法①:

#!/bin/bash
sum=0
for I in {1..150}; do
    sum=$(($sum+2*$I))
done
echo "the sum is $sum"

方法②:

#!/bin/bash
let SUM=0
for I in $(seq 1 1150); do
   if [ $[$I%2] == 0 ]; then
         let  SUM+=$I
   fi
done
echo "the sum is $SUM."

 四、利用for语句ping C类网、ping B类网。

①、ping C类网:

#!/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类网:

#!/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。

#!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)

#! /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."