当前位置 博文首页 > 8个实用的Shell脚本分享

    8个实用的Shell脚本分享

    作者:admin 时间:2021-07-05 18:32

    几个Shell脚本的例子,觉得还不错。

    【例子:001】判断输入为数字,字符或其他

    复制代码 代码如下:

    #!/bin/bash 
    read -p "Enter a number or string here:" input 
     
    case $input in 
       [0-9]) echo -e "Good job, Your input is a numberic! \n" ;; 
    [a-zA-Z]) echo -e "Good job, Your input is a character! \n" ;; 
           *) echo -e "Your input is wrong, input again!   \n"  ;; 
    esac 

    【例子:002】求平均数
    复制代码 代码如下:

    #!/bin/bash 
     
    # Calculate the average of a series of numbers. 
     
    SCORE="0" 
    AVERAGE="0" 
    SUM="0" 
    NUM="0" 
     
    while true; do 
     
      echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE; 
     
      if (("$SCORE" < "0"))  || (("$SCORE" > "100")); then 
        echo "Be serious.  Common, try again: " 
      elif [ "$SCORE" == "q" ]; then 
        echo "Average rating: $AVERAGE%." 
        break 
      else 
        SUM=$[$SUM + $SCORE] 
        NUM=$[$NUM + 1] 
        AVERAGE=$[$SUM / $NUM] 
      fi 
     
    done 
     
    echo "Exiting." 

    【例子:003】自减输出
    复制代码 代码如下:

    [scriptname: doit.sh] 
    while (( $# > 0 )) 
    do 
      echo $* 
      shift 
    done  
             
    /> ./doit.sh a b c d e 
    a b c d e 
    b c d e 
    c d e 
    d e 


    【例子:004】在文件中添加前缀
    复制代码 代码如下:

    # 人名列表 
    # cat namelist 
    Jame 
    Bob 
    Tom 
    Jerry 
    Sherry 
    Alice 
    John 
     
    # 脚本程序 
    # cat namelist.sh 
    #!/bin/bash 
    for name in $(cat namelist) 
    do 
            echo "name= " $name 
    done 
    echo "The name is out of namelist file" 
     
    # 输出结果 
    # ./namelist.sh 
    name=  Jame 
    name=  Bob 
    name=  Tom 
    name=  Jerry 
    name=  Sherry 
    name=  Alice 
    name=  John 

    【例子:005】批量测试文件是否存在

    复制代码 代码如下:

    [root@host ~]# cat testfile.sh       
    #!/bin/bash 
     
     
    for file in test*.sh 
    do 
      if [ -f $file ];then 
         echo "$file existed." 
      fi 
    done 
     
    [root@host ~]# ./testfile.sh 
    test.sh existed. 
    test1.sh existed. 
    test2.sh existed. 
    test3.sh existed. 
    test4.sh existed. 
    test5.sh existed. 
    test78.sh existed. 
    test_dev_null.sh existed. 
    testfile.sh existed. 

    【例子:005】用指定大小文件填充硬盘
    复制代码 代码如下:

    [root@host ~]# df -ih /tmp 
    Filesystem            Inodes   IUsed   IFree IUse% Mounted on 
    /dev/mapper/vg00-lvol5 
                           1000K    3.8K    997K    1% /tmp 
    [root@host ~]# cat cover_disk.sh 
    #!/bin/env bash 
    counter=0 
    max=3800 
    remainder=0 
    while true 
    do 
        ((counter=counter+1)) 
        if [ ${#counter} -gt $max ];then 
            break 
        fi 
        ((remainder=counter%1000)) 
        if [ $remainder -eq 0 ];then 
            echo -e "counter=$counter\tdate=" $(date) 
        fi 
        mkdir -p /tmp/temp 
        cat < testfile > "/tmp/temp/myfile.$counter" 
        if [ $? -ne 0 ];then 
            echo "Failed to write file to Disk." 
            exit 1 
        fi 
    done 
    echo "Done!" 
    [root@host ~]# ./cover_disk.sh 
    counter=1000    date= Wed Sep 10 09:20:39 HKT 2014 
    counter=2000    date= Wed Sep 10 09:20:48 HKT 2014 
    counter=3000    date= Wed Sep 10 09:20:56 HKT 2014 
    cat: write error: No space left on device 
    Failed to write file to Disk. 
    dd if=/dev/zero of=testfile bs=1M count=1 

    【例子:006】通过遍历的方法读取配置文件
    复制代码 代码如下:

    [root@host ~]# cat hosts.allow 
    127.0.0.1 
    127.0.0.2 
    127.0.0.3 
    127.0.0.4 
    127.0.0.5 
    127.0.0.6 
    127.0.0.7 
    127.0.0.8 
    127.0.0.9 
    [root@host ~]# cat readlines.sh 
    #!/bin/env bash 
    i=0 
    while read LINE;do 
        hosts_allow[$i]=$LINE 
        ((i++)) 
    done < hosts.allow 
    for ((i=1;i<=${#hosts_allow[@]};i++)); do 
        echo ${hosts_allow[$i]} 
    done 
    echo "Done" 
    [root@host ~]# ./readlines.sh 
    127.0.0.2 
    127.0.0.3 
    127.0.0.4 
    127.0.0.5 
    127.0.0.6 
    127.0.0.7 
    127.0.0.8 
    127.0.0.9 
    Done 

    【例子:007】简单正则表达式应用
    复制代码 代码如下:

    [root@host ~]# cat regex.sh 
    #!/bin/env sh 
    #Filename: regex.sh 
    regex="[A-Za-z0-9]{6}" 
    if [[ $1 =~ $regex ]] 
    then 
      num=$1 
      echo $num 
    else 
      echo "Invalid entry" 
      exit 1 
    fi 
    [root@host ~]# ./regex.sh 123abc 
    123abc 
     
    #!/bin/env bash 
    #Filename: validint.sh 
    validint(){ 
        ret=`echo $1 | awk '{start = match($1,/^-?[0-9]+$/);if (start == 0) print "1";else print "0"}'` 
        return $ret 

     
    validint $1 
     
    if [ $? -ne 0 ]; then 
        echo "Wrong Entry" 
        exit 1 
    else 
        echo "OK! Input number is:" $1 
    fi 

    【例子:008】简单的按日期备份文件
    复制代码 代码如下:

    #!/bin/bash 
     
    NOW=$(date +"%m-%d-%Y")      # 当前日期 
    FILE="backup.$NOW.tar.gz"    # 备份文件 
    echo "Backing up data to /tmp/backup.$NOW.tar.gz file, please wait..."  #打印信息 
    tar xcvf /tmp/backup.$NOW.tar.gz /home/ /etc/ /var       # 同时备份多个文件到指定的tar压缩文件中 
    echo "Done..."          

    jsjbwy
    下一篇:没有了