华域联盟 linux shell 8个实用的Shell脚本分享

8个实用的Shell脚本分享

几个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..."          

您可能感兴趣的文章:

本文由 华域联盟 原创撰写:华域联盟 » 8个实用的Shell脚本分享

转载请保留出处和原文链接:https://www.cnhackhy.com/17021.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部