萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 8個實用的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

  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=$countertdate=" $(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..."

copyright © 萬盛學電腦網 all rights reserved