shell脚本练习:简单shell脚本练习实例

图标

王豆瓜

豆瓜网

豆瓜网专栏

独家首发
王豆瓜 图标 2019-12-29 13:03:09

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

一、编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息。

原文代码为:

#!/bin/bashif  ! grep "^#!" $1 &>/dev/null; thencat >> $1 << EOF#!/bin/bash# Author:#Date & Time: `date +"%F %T"`#Description:EOFfivim +5 $1

初学者看到这代码,可能不太会用,其实很简单,看到有$1,就表示需要带参数来执行,所以,这个脚本的执行方法是:

①、将以上代码保存为shell脚本,比如test,

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

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

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

执行效果如下:

shell脚本练习

这个脚本对于经常写shell的童鞋就很有用,但是忘记带参数执行就会卡住不动,而且不带路径的话就直接在当前目录下生成新文件,会很乱。所以张戈就将其改进一下,变得更加易用:

#!/bin/bashif [[ -z "$1" ]];thennewfile=~/newscript_`date +%m%d_%S`elsenewfile=$1fiif  ! grep "^#!" $newfile &>/dev/null; thencat >> $newfile << EOF#!/bin/bash# Author: Inert Your Name here.#Date & Time: `date +"%F %T"`#Description: Please Edit here.EOFfivim +5 $newfile

改进说明:如果未带参数执行,将在家目录下生成带时间戳的新文件,避免重复及乱的问题。可将这个脚本改名后直接丢到path路径中,比如/bin/addjb  那么你的系统就多了一个命令 addjb了,是不是很有趣呢!

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

二、任意三个整数,判断最大数。

#!/bin/bashecho  "please enter three number:"read -p "the first number is :" n1read -p "the second number is:" n2read -p "the third number is:" n3let MAX=$n1if [ $n2 -ge $n1 ]; thenMAX=$n2fiif [ $n3 -ge $MAX ]; thenMAX=$n3fiecho "the max number is $MAX."

执行效果:

shell脚本练习

 

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

 

三、求100以内偶数的和。

方法①:

#!/bin/bashsum=0for I in {1..50}; dosum=$(($sum+2*$I))doneecho "the sum is $sum"

方法②:

#!/bin/bashlet SUM=0for I in $(seq 1 100); doif [ $[$I%2] == 0 ]; thenlet  SUM+=$Ifidoneecho "the sum is $SUM."

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

①、ping C类网:

#!/bin/bashread -p "C NETWORK:" MYNETPINGNET=`echo $MYNET | sed 's/\([0-9.]*\)\ .[0-9]*/\1/g'`let I=1while [ $I -le 254 ];doping –c1 –W1 $PINGNET.$I &>/dev/null[ $? -eq 0 ] && echo "$PINGNET.$I  online." || echo "$PINGNET.$I offline."let  I++done

②、ping B类网:

#!/bin/bashread -p "B network:" MYNETPINGNET=`echo $MYNET | sed 's/\([0-9]\{1,3\}\.[0-9]\{1,3\}\)\..*/\1/g'`for P in {0..255}; dofor I in {1..255}; doif ping -c1 -W2 $PINGNET.$P.$I &>/dev/null; thenecho  "$PINGNET.$P.$I is online."elseecho "$PINGNET.$P.$I is offline."fidonedone

五、提示输入一个用户名,判断用户是否存在,如果存在,显示一下用户默认的shell。

#!bin/bashread –p "please input a username:"  USERif cut –d:-f1  /etc/passwd | grep "^$USER$" &> /dev/null ;thenMYBASH=`grep  "^$USER:"  /etc/passwd | cut –d :  -f7`echo "${USER}'s shell is $MYBASH"elseecho "$USER not exists."exit  4fi

六、监控系统登录人数,超过四个,显示已经达到四个,5S检查一下,并退出脚本(exit)

#! /bin/bashread –p "A user:"  MYUSERcut –d : -f1 /etc/passwd | grep "^$MYUSER" &> /dev/null || exit 6let COUNT=`who |  grep "^$MYUSER"  | wc –l`until [ $COUNT –ge 4 ]; dosleep 5let COUNT=`who | grep “^$MYUSER” |  wc -l`doneecho "$MYUSER loged 4 times."


本文由豆瓜网专栏作家 王豆瓜 投稿发布,并经过豆瓜网编辑审核。

转载此文章须经作者同意,并附上出处(豆瓜网)及本页链接。

若稿件文字、图片、视频等内容侵犯了您的权益,请联系本站进行 投诉处理

相关搜索

shell脚本练习
图标 图标

王豆瓜

豆瓜网

豆瓜网专栏

  • 董事长总裁ceo有哪些区别

    图标
    王豆瓜 图标 · 今天 13:41:25 · 576浏览
  • 无线路由最远多少米可以用

    图标
    王豆瓜 图标 · 今天 13:30:41 · 296浏览
  • 截图软件Snipaste

    截图软件Snipaste

    图标
    王豆瓜 图标 · 今天 13:14:10 · 443浏览
  • 全部评论

    王豆瓜

    豆瓜网

    豆瓜网专栏

  • 董事长总裁ceo有哪些区别
  • 无线路由最远多少米可以用
  • 截图软件Snipaste
  • vbs无限弹窗制作方法
  • c盘根目录这些文件需要了解清楚
  • 我来说两句