几个不错的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
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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。