標籤:shell 小程式 指令碼
幾個Shell指令碼的例子,覺得還不錯。
【例子:001】判斷輸入為數字,字元或其他
#!/bin/bashread -p "Enter a number or string here:" inputcase $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] fidoneecho "Exiting."
【
例子:003】自減輸出
[scriptname: doit.sh]while (( $# > 0 ))do echo $* shiftdone /> ./doit.sh a b c d ea b c d eb c d ec d ed ee
【
例子:004】在檔案中添加首碼
# 人名列表# cat namelistJameBobTomJerrySherryAliceJohn# 指令碼程式# cat namelist.sh#!/bin/bashfor name in $(cat namelist)do echo "name= " $namedoneecho "The name is out of namelist file"# 輸出結果# ./namelist.shname= Jamename= Bobname= Tomname= Jerryname= Sherryname= Alicename= John
【
例子:005】批量測試檔案是否存在
[[email protected] ~]# cat testfile.sh #!/bin/bashfor file in test*.shdo if [ -f $file ];then echo "$file existed." fidone[[email protected] ~]# ./testfile.shtest.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】用指定大小檔案填充硬碟
[[email protected] ~]# df -ih /tmpFilesystem Inodes IUsed IFree IUse% Mounted on/dev/mapper/vg00-lvol5 1000K 3.8K 997K 1% /tmp[[email protected] ~]# cat cover_disk.sh#!/bin/env bashcounter=0max=3800remainder=0while truedo ((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 fidoneecho "Done!"[[email protected] ~]# ./cover_disk.shcounter=1000 date= Wed Sep 10 09:20:39 HKT 2014counter=2000 date= Wed Sep 10 09:20:48 HKT 2014counter=3000 date= Wed Sep 10 09:20:56 HKT 2014cat: write error: No space left on deviceFailed to write file to Disk.dd if=/dev/zero of=testfile bs=1M count=1【
例子:006】通過遍曆的方法讀取設定檔
[[email protected] ~]# cat hosts.allow127.0.0.1127.0.0.2127.0.0.3127.0.0.4127.0.0.5127.0.0.6127.0.0.7127.0.0.8127.0.0.9[[email protected] ~]# cat readlines.sh#!/bin/env bashi=0while read LINE;do hosts_allow[$i]=$LINE ((i++))done < hosts.allowfor ((i=1;i<=${#hosts_allow[@]};i++)); do echo ${hosts_allow[$i]}doneecho "Done"[[email protected] ~]# ./readlines.sh127.0.0.2127.0.0.3127.0.0.4127.0.0.5127.0.0.6127.0.0.7127.0.0.8127.0.0.9Done【
例子:007】簡單Regex應用
[[email protected] ~]# cat regex.sh#!/bin/env sh#Filename: regex.shregex="[A-Za-z0-9]{6}"if [[ $1 =~ $regex ]]then num=$1 echo $numelse echo "Invalid entry" exit 1fi[[email protected] ~]# ./regex.sh 123abc123abc#!/bin/env bash#Filename: validint.shvalidint(){ ret=`echo $1 | awk '{start = match($1,/^-?[0-9]+$/);if (start == 0) print "1";else print "0"}'` return $ret}validint $1if [ $? -ne 0 ]; then echo "Wrong Entry" exit 1else echo "OK! Input number is:" $1fi
幾個不錯的Shell指令碼