zzgzyyz 发表于 2018-8-25 12:30:08

shell-script(command groups)

  shell-script簡稱shell(這裡專指的linux下的script)
  關鍵字:test,if-else, fo-do-done,case
  shell-script的應用非常廣泛,各種領域都有shell-script的應用,這裡我們主要講講日常應用。
  關於執行,一般用source、 sh、./相對路徑/文件名、 /絕對路徑/文件名。這是一般常用的執行方式。
  首先學習shell-script的test,主要檢測系統上面文件或者文件的屬性。具體test的測試標誌和代表的意義如下:
  第一、關於文件類型的檢測。
  -e:文件是否存在。
  -f:文件存在是否為一般文件
  -d:文件存在是否為目錄
  -b:文件存在是否為塊設備(block device)
  -c:文件存在是否為字符設備(character device)
  -S:文件存在是否為Socket文件
  -p:文件存在是否為FIFO(pipe)文件
  -L:文件存在是否為一個連接文件(無論hard link or symbol link)
  第二、關於文件的權限檢測。
  -r:文件存在且具有可讀權限
  -w:文件存在且具有可寫權限
  -x:文件存在且具有可執行權限
  -u:文件存在且具有SUID屬性
  -g:文件存在且具有SGID屬性
  -k:文件存在且具有Sticky bit屬性
  -s:文件存在且為非空文件
  第三、兩個文件的比較
  -nt:(newer than)文件一比文件二新?
  -ot:(older than)文件一比文件二舊?
  -ef:文件一和文件二是否為同一文件,如hard link ,是否指向同一inode?
  第四、整數的比較
  -eq:值相等(equal)
  -ne:值不等(not equal)
  -gt:number1大於number2(greater than)
  -lt:number1小於number2(less than)
  -ge:number1大於等於number2(greater than or equal)
  -le:number1小於等於number2(less than or equal)
  第五、string的判斷
  test -z string:string為0?空為true
  test -n string:string為0?空為false
  test str1=str2:str1等於str2,為true
  test str1 != str2 :不等於,為true
  第六、多重判斷(也可成為邏輯判斷)
  -a:兩種狀況同時為true,則為true。eg:test -r file -a -x file,file既有可讀和可執行時,才為true。
  -o:任意一條為true,則為true。eg:test -r file -a -x file,file可讀或者可執行時都為true,當file同時不可讀,不可執行時才為false。
  !:邏輯非。
  利用[]可以省略test,兩者的效果一樣。但是在shell-script中使用[]時,[]兩邊一定要使用空格。還有就是[]裏面的變量,最好都用雙引號括起來,變量用單引號和雙引號括起來都可以。這點很重要。
  shell script 的default變量($0,$1,$2...),script內使用的特殊變量如下:
  $#:表示後面的參數個數, $4代表$#是4。
  $@:表示 "$1" "$2" "$3" ,每個變量是獨立的(用雙引號括起來)
  $*:表示 "$1 $2 $3"。
  其實$@和$*差不多,一般情況下直接使用或者記憶$@即可。
  使script參數偏移的指令shift,在script中加入shift後會使script的參數偏移。。
  下面學習if...then...fi,   if...then...else...fi,if...then...elif...then... else...fi
  使用if條件判斷時,條件判斷使用的邏輯運算&&(and)和||(or)相當於test中的-a和-o參數。
  case...in...esac
  function功能:function name(){ 程序 }
  shell-script中的循環:有while...do...done, until...do...done(不定循環), while [ condition ] do programming done 當condition成立時開始循環,知道condition不成立終止循環,until [ condition ] do programming done, 當condition不成立時開始循環和while相反,指導condition成立時終止循環。
  固定循環:for...do...done, for variable in val1 val2 val3 do programming done。for的另一種用法和C語言一樣,for (( init val; end val; increment val))doprogrammingdone。
  經過兩天的完全學習,終於學習完shell-script了。還是重在實踐啊。。。

页: [1]
查看完整版本: shell-script(command groups)