Linux系統下shell腳本語言學習手冊指南(2)

發表于:2012-09-27來源:cu作者:cloudtimes點擊數: 標簽:linux腳本語言shell
#!/bin/sh # The ticks are backticks (`) not normal quotes (): tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print` 3) 流程控制 1.if if 表達式 如果條件為真則執行then后面的部分:

  #!/bin/sh

  # The ticks are backticks (`) not normal quotes ('):

  tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`

  3) 流程控制

  1.if

  "if" 表達式 如果條件為真則執行then后面的部分:

  if ....; then

  ....

  elif ....; then

  ....

  else

  ....

  fi

  大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字符串、判斷文件

  是否存在及是否可讀等等…

  通常用" [ ] "來表示條件測試。注意這里的空格很重要。要確保方括號的空格。

  [ -f "somefile" ] :判斷是否是一個文件

  [ -x "/bin/ls" ] :判斷/bin/ls是否存在并有可執行權限

  [ -n "$var" ] :判斷$var變量是否有值

  [ "$a" = "$b" ] :判斷$a和$b是否相等

  執行man test可以查看所有測試表達式可以比較和判斷的類型。

  直接執行以下腳本:

  #!/bin/sh

  if [ "$SHELL" = "/bin/bash" ]; then

  echo "your login shell is the bash (bourne again shell)"

  else

  echo "your login shell is not bash but $SHELL"

  fi

  變量$SHELL包含了登錄shell的名稱,我們和/bin/bash進行了比較。

  快捷操作符

  熟悉C語言的朋友可能會很喜歡下面的表達式:

  [ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"

  這里 && 就是一個快捷操作符,如果左邊的表達式為真則執行右邊的語句。

  您也可以認為是邏輯運算中的與操作。上例中表示如果/etc/shadow文件存在

  則打印” This computer uses shadow passwors”。同樣或操作(||)在shell編程中也是

  可用的。這里有個例子:

  #!/bin/sh

  mailfolder=/var/spool/mail/james

  [ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder" ; exit 1; }

  echo "$mailfolder has mail from:"

  grep "^From " $mailfolder

  該腳本首先判斷mailfolder是否可讀。如果可讀則打印該文件中的"From" 一行。如果不可讀

  則或操作生效,打印錯誤信息后腳本退出。這里有個問題,那就是我們必須有兩個命令:

  -打印錯誤信息

  -退出程序

  我們使用花括號以匿名函數的形式將兩個命令放到一起作為一個命令使用。一般函數將在下文提及。

  不用與和或操作符,我們也可以用if表達式作任何事情,但是使用與或操作符會更便利很多。

  2.case

  case :表達式可以用來匹配一個給定的字符串,而不是數字。

  case ... in

  ...) do something here ;;

  esac

  讓我們看一個例子。 file命令可以辨別出一個給定文件的文件類型,比如:

  file lf.gz

  這將返回:

  lf.gz: gzip compressed data, deflated, original filename,

  last modified: Mon Aug 27 23:09:18 2001, os: Unix

  我們利用這一點寫了一個叫做smartzip的腳本,該腳本可以自動解壓bzip2, gzip 和zip 類型的壓縮文件:

  #!/bin/sh

  ftype=`file "$1"`

  case "$ftype" in

  "$1: Zip archive"*)

  unzip "$1" ;;

  "$1: gzip compressed"*)

  gunzip "$1" ;;

  "$1: bzip2 compressed"*)

  bunzip2 "$1" ;;

  *) echo "File $1 can not be uncompressed with smartzip";;

  esac

  您可能注意到我們在這里使用了一個特殊的變量$1。該變量包含了傳遞給該程序的第一個參數值。

  也就是說,當我們運行:

  smartzip articles.zip

  $1 就是字符串 articles.zip

  3. selsect

  select 表達式是一種bash的擴展應用,尤其擅長于交互式使用。用戶可以從一組不同的值中進行選擇。

  select var in ... ; do

  break

  done

  .... now $var can be used ....

  下面是一個例子:

  #!/bin/sh

  echo "What is your favourite OS?"

  select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do

  break

  done

  echo "You have selected $var"

  下面是該腳本運行的結果:

  What is your favourite OS?

  1) Linux

  2) Gnu Hurd

  3) Free BSD

  4) Other

  #? 1

  You have selected Linux

  4.loop

  loop表達式:

  while ...; do

  ....

  done

  while-loop 將運行直到表達式測試為真。will run while the expression that we test for is true.

  關鍵字"break" 用來跳出循環。而關鍵字”continue”用來不執行余下的部分而直接跳到下一個循環。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97