linux-shell脚本实战

一.BASH

说bash之前,先说说脚本:脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑),脚本程序在执行时,是由系统的一个解释器,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。

Bash脚本类似批处理,简单来讲就是把许多的指令集合在一起,并提供循环、条件、判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操作,并可以完成图形工具无法实现的功能。

二.shell脚本实例

1.用户输入一个ip,检测这个ip的那台主机是否开机
#!/bin/bash
read -p "please input ip:" IP
ping $IP -w 1s &> /dev/null && echo $IP is up || echo $IP is down

这个脚本存在一个交互的过程,需要用户输入ip,然后才会执行接下来的命令。如果能ping的通,就会打印up,否则会打印down。

2.实现一个脚本,脚本后面跟一个动作(create or delete)再跟一个文件(用户信息),来实现用户的创建和删除
#!/bin/bash

### This script add or delete the userfile's user 
### 2017-4-27
### by gan_ke



##  The function for add user
CREATE_USER(){
    L=`wc -l $1 | cut -d " " -f 1`
    for NUM in `seq 1 "$L"`
    do
        USERNAME=`sed -n ${NUM}p $1`
        CHECK_USER=`getent passwd $USERNAME`
        if
        [ -z "$CHECK_USER" ]
        then
            useradd $USERNAME
            echo "$USERNAME is create successfully!"
        else
            echo "$USERNAME is exist!"
        fi
    done
}
##  The function for delete user
DELETE_USER(){


    L=`wc -l $1 | cut -d " " -f 1`
    for NUM in `seq 1 "$L"`
    do
        USERNAME=`sed -n ${NUM}p $1`
        CHECK_USER=`getent passwd $USERNAME`
        if
        [ -n "$CHECK_USER" ]
        then
            userdel $USERNAME
            echo "$USERNAME is delete successfully!"
        else
            echo "$USERNAME is not exist!"
        fi
    done
}



if
[ -n "$1" -a -n "$2" ]
then
    case "$1" in
        create)
        CREATE_USER $2 
        ;;

        delete)
        DELETE_USER $2
        ;;
        *)
        echo 'ERROR:If you wang to add user ,please input  "create" !'
        echo 'ERROR:If you wang to delete user,please input "delete" !'
    esac

else
    echo "ERROR:please input a active and a userfile!"
fi

在这个脚本中使用到了函数,使用函数并不是为了提高我们脚本的运行速度,但是可以让我们的脚本的逻辑变得的清晰,结构变得明了。
首先,先判断用户是否将动作和文件跟在命令的后面,如果没缺少,则提示用户输入;然后用了一个case语句,case语句和if语句都可以实现相同的功能,但是效率不同,现在可能体现不出来,当你的分支的数量级达到一定程度,就会很明显,这是因为case和if的实现原理是不同的,if语句是一条一条进行判断,恰巧要执行的在最后面,那么前面的条件都得遍历一遍,而case语句则不同,case语句只匹配一次,所以能大大提高效率。case匹配用户输入的动作,如果是create,则执行CREATE_USER函数,如果是delete,则执行DELETE_USER函数;
CREATE_USER函数和DELETE_USER函数的思想大致相同,首先遍历文件内的用户名,判断在系统内是否存在,然后再执行相应的操作。

3.实现一个1分10秒的计时器
#!/bin/bash

### This script is time count down
### 2017-04-27
### by gan_ke

MIN=1
for ((s=10;s>=0;s--))
do

    echo -n "1:${s}"
    echo -ne "\r"
    sleep 1

    if
    [ "$s" -eq "0" ]
    then

        for ((s=59;s>0;s--))
        do
            echo -n "0:${s}"
            echo -ne "\r"
            sleep 1
        done
    fi

done

计时器主要用到了for循环来实现,每一秒可以用sleep 1 来实现。然后就是逻辑的构造,首先让秒先循环,直到秒为0,分钟为1的时候,进入子循环,分钟被赋值为0,秒被赋值为59。其次就是刷新的问题,如果不做任何处理,每一秒都会打印出一个时间,这里我们用到了echo -n “1:${s}” echo -ne “\r”来实现刷新。

三.小结

写得一手好脚本对于玩linux来说是很有用的,这次展示的脚本只是我初学脚本的几个例子,多说无益,要想得心应手,还得多写、多练。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值