写一个脚本:

计算100以内所有能被3整除的正整数的和;

取模,取余:%

3%2=1

100%55=45

#!/bin/bash

let SUM=0

for I in {1..100};do

        TMP=$[$I%3]

        if [ $TMP -eq 0 ];then

                SUM=$[$SUM+$I]

        fi

done

echo "SUM is $SUM"

写一个脚本:

计算100以内所有奇数的和以及所有偶数的和;分别显示之;

写一个脚本:

每5秒钟进行判断某用户是否登录。

#!/bin/bash

for I in `seq 100`;do

w|grep "wuxiangd" &>/dev/null && echo "wuxiangdong is loggin in" || echo "wuxiangdong is not loggin in"

sleep 5

done          


写一个脚本:

启动服务的选项:只接受参数start,stop,restart,status其中之一

#!/bin/bash

if [ $# -lt 1 ];then

        echo "Usage: `basename $0` {start|stop|restart|status}"

fi

case $1 in

-sta*)

        echo "service start"

        ;;

-stop)

        echo "service stop"

        ;;

-restart)

        echo "service restart"

        ;;

-status)

        echo "service running"

        ;;

*)

        echo "Unknow"

        exit 2

        ;;

esac


写一个脚本:

判断10个随机数中,最大和最小的随机数,并且输出

#!/bin/bash

declare -i MIN=0

declare -i MAX=0

for I in {1..10};do

        MYRANDOM=$RANDOM

        [ $I -eq 1 ] && MIN=$MYRANDOM

        if [ $I -lt 10 ];then

                echo -n "$MYRANDOM ,"

        else

                echo "$MYRANDOM"

        fi

        if [ $MYRANDOM -gt $MAX ];then

                MAX=$MYRANDOM

        fi

        if [ $MYRANDOM -lt $MIN ] ;then

                MIN=$MYRANDOM

        fi

done

echo "The Max is $MAX"

echo "The Min is $MIN"

                

写一个脚本:

通过选项-del -add -v等参数进行删除和增加用户。

#!/bin/bash

#

DEBUG=0

ADD=0

DEL=0

for I in `seq 0 $#`; do

  if [ $# -gt 0 ]; then

 case $1 in

 -v|--verbose)

DEBUG=1

shift ;;

 -h|--help)

echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"

exit 0

;;

 --add)

ADD=1

ADDUSERS=$2

shift 2

;;

 --del)

DEL=1

DELUSERS=$2

shift 2

;;

 *)

echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"

exit 7

;;

    esac

  fi

done


if [ $ADD -eq 1 ]; then

  for USER in `echo $ADDUSERS | sed 's@,@ @g'`; do

    if id $USER &> /dev/null; then

      [ $DEBUG -eq 1 ] && echo "$USER exists."

    else

      useradd $USER

      [ $DEBUG -eq 1 ] && echo "Add user $USER finished."

    fi

  done

fi


if [ $DEL -eq 1 ]; then

  for USER in `echo $DELUSERS | sed 's@,@ @g'`; do

    if id $USER &> /dev/null; then

      userdel -r $USER

      [ $DEBUG -eq 1 ] && echo "Delete $USER finished."

    else

      [ $DEBUG -eq 1 ] && echo "$USER not exist."

    fi

  done

fi



练习:写一个脚本showlogged.sh,其用法格式为:

showlogged.sh -v -c -h|--help

其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户数;

如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息;如

Logged users: 4.


They are:

root     tty2         Feb 18 02:41

root     pts/1        Mar  8 08:36 (172.16.100.177)

root     pts/5        Mar  8 07:56 (172.16.100.177)

hadoop   pts/6        Mar  8 09:16 (172.16.100.177)


#!/bin/bash

#

declare -i SHOWNUM=0

declare -i SHOWUSERS=0


for I in `seq 1 $#`; do

  if [ $# -gt 0 ]; then

    case $1 in

    -h|--help)

      echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"

      exit 0 ;;

    -v|--verbose)

      let SHOWUSERS=1

      shift ;;

    -c|--count)

      let SHOWNUM=1

      shift ;;

    *)

      echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"

      exit 8 ;;

    esac

  fi

done


if [ $SHOWNUM -eq 1 ]; then

  echo "Logged users: `who | wc -l`."

  if [ $SHOWUSERS -eq 1 ]; then

    echo "They are:"

    who

  fi

fi

写个脚本,按如下方式执行:

mkscript.sh -v|--version VERSION -a|--author AUTHOR -t|--time DATETIME -d|--description DESCRIPTION -f|--file /PATH/TO/FILE -h|--help


1、此脚本能创建或打开-f选项指向的文件/PATH/TO/FILE;

如果其为空文件,能自动为其生成第一行;

如果文件不空,且第一行不是#!/bin/bash,则中止此脚本,并报错“The file is not a bash script.";

否则,则直接使用vim 打开此文件;

提示:/PATH/TO/FILE,要判断其目录是否存在;如果不存在,则报错;


2、如果为空文件,自动生成的第一行内容为:

#!/bin/bash

3、如果为空文件,且使用了-a选项,则在文件中添加“# Author: -a选项的参数”,比如:

# Author: Jerry

4、如果为空文件,且使用了-t选项,则在文件中添加“# Date: 脚本执行-t选项后指定的时间”,比如:

# Date: 2013-03-08 18:05

5、如果为空文件,且使用了-d选项,则在文件中添加“# Description: -d选项的内容”,比如:

# Description: Create a bash script file head.

6、如果为空文件,且使用了-v选项,则在文件添加“# Version: -v后跟的参数”,比如:

# Version: 0.1

6、-h选项只能单独使用,用于显示使用帮助;

7、其它选项,显示帮助信息;

说明:

这是一个用于创建脚本的脚本,它可以自动帮助创建一个bash脚本的文件头,这样,以后使用此脚本来创建其它脚本将变得比较高效。比如:

#!/bin/bash

# Author: Jerry(jerry@magedu.com)

# Date: 2013-03-08 18:05

# Description: Create a bash script file head.

# Version: 0.1

#

实现:

#!/bin/bash

declare -i VERSION=0

declare -i AUTHOR=0

declare -i TIME=0

declare -i DESCRIPTION=0

declare -i FILE=0

for I in `seq $#`;do

        -v|-version)

        VERSION=1

        MYVERSION=$2

        -a|--author)

        AUTHOR=1

        MYAUTHOR=$2

        shift 2

        ;;

        -t|-time)

        TIME=1

        MYTIME=$2

        shift 2

        ;;

        -d|--description)

        DESCRIPTION=1

        MYDESCRIPTION=$2

        shift 2

        ;;

        -f|--file)

        FILE=1

        MYFILE=$2

        shift 2

        ;;

        -h|-help)

                exit 0

        ;;

        *)

        esac

fi

done

#######################################################################################

if [ $FILE -eq 1 ];then

        if [ -e $MYFILE ];then

                MYHEAD=`head -1 $MYFILE`

                if [ "$MYHEAD" == "#!/bin/bash" ];then

                        if [ $AUTHOR -eq 1 ];then

                                echo "#Author:$MYAUTHOR">>$MYFILE

                        fi

                        if [ $TIME -eq 1 ];then

                                echo "#Date:$MYTIME">>$MYFILE

                        fi

                        if [ $DESCRIPTION -eq 1 ];then

                                echo "#Description:$MYDESCRIPTION">>$MYFILE

                        fi

                        if [ $VERSION -eq 1 ];then

                                echo "#Version:$MYVERSION">>$MYFILE

                        fi

                        vim + $MYFILE

                        exit 0

                else

                        echo "The file $MYFILE is not a bash Script!"

                fi

        else

                touch $MYFILE

                echo "#!/bin/bash">>$MYFILE

                if [ $AUTHOR -eq 1 ];then

                        echo "#Author:$MYAUTHOR">>$MYFILE

                fi

                if [ $TIME -eq 1 ];then

                        echo "#Date:$MYTIME">>$MYFILE

                fi

                if [ $DESCRIPTION -eq 1 ];then

                        echo "#Description:$MYDESCRIPTION">>$MYFILE

                fi

                if [ $VERSION -eq 1 ];then

                        echo "#Version:$MYVERSION">>$MYFILE

                fi

                vim + $MYFILE

                exit 0

        fi

fi


写一个脚本:

1、通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线,

如果在线,就显示"ip is up.",其中的IP要换为真正的IP地址,且以绿色显示;

如果不在线,就显示"ip is down.",其中的IP要换为真正的IP地址,且以红色显示;


要求:分别使用while,until和for(两种形式)循环实现。

ping

-c(ping d的次数)

-W (多长时间内有效)

方法一:

#!/bin/bash

declare -i I=1

while [ $I -le 100 ];do

        if ping -c 1 -W 2 10.25.84.$I &>/dev/null;then

                echo "10.25.84.$I is up"

                sleep 2

        else

                echo "10.25.84.$I is down"

                sleep 2

        fi

        let I+=1

done

方法二:

#!/bin/bash

declare -i I=1


until [ $I -eq 100 ];do

        if ping -c 1 -w 1 10.25.84.$I &>/dev/null;then

                echo "10.25.84.$I is up"

                sleep 1

        else

                echo "10.25.84.$I is down"

                sleep 1

        fi

        let I+=1

done

方法三:

#!/bin/bash

for I in `seq 100`;do

        if ping -c 1 -W 1 10.25.84.$I &>/dev/null;then

                echo "10.25.84.$I is up"

                sleep 1

        else

                echo "10.25.84.$I is down"

        fi

done

方法四:


#!/bin/bash

for ((I=0;I<=100;I++));do

        if ping -c 1 -W 1 10.25.84.$I &>/dev/null;then

                echo "10.25.84.$I is up"

                sleep 1

        else

                echo "10.25.84.$I is down"

                sleep 1

        fi

done

写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/sdb),为指定的硬盘创建分区:

1、列出当前系统上所有的磁盘,让用户选择,如果选择quit则退出脚本;如果用户选择错误,就让用户重新选择;

2、当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认;如果用户选择y就继续,n就退出;否则,让用户重新选择;

3、抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒钟后再分区);

并为其创建三个主分区,第一个为20M,第二个为512M, 第三个为128M,且第三个为swap分区类型;

(提示:将分区命令通过echo传送给fdisk即可实现)

fdisk -l |grep "

dd if=/dev/zero of=/dev/sdb bs=512 count=1

sync

sleep 3

###########################################################################################

#!/bin/bash

echo "This is all partion:"

PARTITIONS=`fdisk -l 2>/dev/null |grep "^Disk /dev/[sh]d[a-z]"|awk '{print $2}'|cut -d: -f1`

echo "$PARTITIONS"

echo -e "Plerse Input partion:\033[31m(quit)\033[0m"

read PART

if [ $PART == 'quit' ];then

        exit 0

fi

until echo "$PARTITIONS" | grep "$PART" ;do

read PART

done

echo -e "The partition will be formate:\033[31m[y|n]\033[0m"

read SELECT

if [ $SELECT == 'y' ];then

        dd if=/dev/zero of=$PART bs=512 count=1 &>/dev/null

        sync

        sleep 3

        echo "Format complete!"

else

        exit 0

fi

echo -e "Do you want to make a partion?\033[31m[y|n]\033[0m"

read SELECT1

if [ $SELECT1 == 'y' ];then

echo 'n

p

1


+40M

n

p

2


+512M

n

p

3


+128M

t

3

82

w'|fdisk $PART &>/dev/null

if [ $? -eq 0 ];then

echo "Build successful!"

fi


else

        exit 0

fi

echo -e "Do you want to build file system?\033[31m[y|n]\033[0m"

read SELECT2

if [ $SELECT2 == 'y' ];then

        for I in `echo "$PARTITIONS"`;do

        mke2fs -j $I &>/dev/null

        done

        echo "build complete!"

else

        exit 0

fi

fdisk -l


写一个脚本,完成以下功能:

说明:此脚本能于同一个repo文件中创建多个Yum源的指向;

1、接受一个文件名做为参数,此文件存放至/etc/yum.repos.d目录中,且文件名以.repo为后缀;要求,此文件不能事先存,否则,报错;

2、在脚本中,提醒用户输入repo id;如果为quit,则退出脚本;否则,继续完成下面的步骤;

3、repo name以及baseurl的路径,而后以repo文件的格式将其保存至指定的文件中;

4、enabled默认为1,而gpgcheck默认设定为0;

5、此脚本会循环执行多次,除非用户为repo id指定为quit;


###########################################################################################

#!/bin/bash

CREATE=0

if [ $# -gt 0 ];then

        case $1 in

        --help|-h)

                echo "Usage:`basename $0` {--help|-h }"

                exit 0;

                ;;

        -c|--create)

                CREATE=1;

                FILENAME=$2;

                ;;

        *)

                echo "Usage:`basename $0` {--help|-h }"

                exit 1;

                ;;

        esac

fi


if [ $CREATE -eq 1 ];then

        if [ -e /etc/yum.repos.d/${FILENAME}.repo ];then

                echo "$FILENAME exis!"

                exit 1;

        else

                ID=yes

                declare -i I=1

                while [ $ID != 'quit' ] && [ $ID != 'q' ] ;do

                        touch /etc/yum.repos.d/${FILENAME}.repo

                        echo "Create ${I}th"

                        read -p "Please input ID OR {quit|q}" ID

                        if [ $ID == 'quit' ] || [ $ID == 'q' ];then

                                exit 0;

                        else

                                echo "[$ID]" >> /etc/yum.repos.d/${FILENAME}.repo

                        fi

                        read  -p "Please input Name:" NAME

                        echo "name=$NAME" >> /etc/yum.repos.d/${FILENAME}.repo

                        read -p "Please input baseurl:" BASEURL

                        echo "baseurl=$BASEURL" >> /etc/yum.repos.d/${FILENAME}.repo

                        echo "enable=1" >> /etc/yum.repos.d/${FILENAME}.repo

                        echo "gpgcheck=0" >> /etc/yum.repos.d/${FILENAME}.repo

                        let I=$I+1

                        echo $I

                done


        fi

fi