#!/bin/bash
#腳本用途:
#創建日期:
#Written by someone
正文......

在shell中,所有沒有聲明的變量都默認是呈現字符串形式,所以var=5*7;$var就成為字符串形式"5*7",而不會進行任何算術運算。聲明變量使用declare指令。
delcare [-afirx] var=...
-a 定義為數組
-f 定義為函數
-i 定義為整數
-r 定義為只讀 
-x 定義為通過環境輸出變量

read name
read的功能是將用戶在鍵盤上輸入的內容放到變量name中。
read name < file的形式通過重定向改變了輸入源為file。

腳本的參數代號:
$0 腳本的文件名
$1 第一個附加參數
$2 第二個附加參數
$3 ......
$# 傳遞給腳本的參數個數
$@ 傳遞給腳本的所有參數
$$ 腳本的進程號,通常用它來生成唯一的臨時文件:/tmp/tmpfile_$$

邏輯判斷式:

關于文件與目錄的邏輯判斷,格式是-×× file或者! -×× file(注意!和-xx和file之間有空格)
-f 檢測文件是否存在
-d 將測目錄是否存在
-b 檢測是否為block文件
-c 檢測是否為character文件
-L 檢測是否為符號鏈接文件
-S 檢測是否為socket標簽文件
-e 檢測某個東西是否存在,可以是任何東西

關于程序的邏輯判斷,格式是-×× proc
-G 檢測是否由GID所執行的程序擁有
-O 檢測是否由UID所執行的程序擁有

關于文件的屬性檢測,格式是-×× file
-r 檢測是否為可讀屬性
-w 檢測是否為可寫屬性
-x 檢測是否為可執行屬性
-s 檢測是否為非空白文件
-u 檢測是否具有SUID屬性
-g 檢測是否具有SGID屬性
-k 檢測是否具有sticky bit屬性

兩個文件的判斷與比較,格式是file1 -×× file2
-nt 第一個文件比第二個文件新
-ot 第一個文件比第二個文件舊
-ef 第一個文件和第二個文件為同一個文件(諸如鏈接文件)

邏輯與、邏輯或
&& 邏輯與
|| 邏輯或

運算符:
-eq 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于或等于
-ge 大于或等于
-a 雙方都成立(and)
-o 單方成立(or)

字符串比較:
= 兩個字符串相同
!= 兩個字符串不同
-z 空字符串
-n 非空字符串

條件判斷:
if [條件判斷1] &&/|| [條件判斷2]; then
  ……
elif [條件判斷1] &&/|| [條件判斷4]; then
  ……
else
  ……
fi
注意:在[]中,只能有一個判斷式;在[]與[]之間,可以使用&&或者||結合判斷式;[]中每一個獨立的組件之間需要用空格鍵隔開,這一點尤其要注意,其中組件是指[、]、變量、運算符號和字符串、值等。例如:
if [ "$var" = "yes" ]; then

case var in
方式一 | 方式×)
  程序段
  ;;
方式二 | 方式×)
  程序段
  ;;
*)
  echo "Usage {方式一|方式二}" 
  exit 1
esac
 
循環:
for((條件1;條件2;條件3))
do
 程序段
done

for var in var_list     //var_list是以空格鍵分開的選擇項,多為字符串,例如for var in yes no other或者for var in "yes" "no" "other"
do
 程序段
done
看下面一段腳本程序,該程序演示了$(command)的用法,for命令的參數來自$()中的命令的結果:
for file in $(ls *.sh)
do
 lpr $file
done

while [條件]
do
 程序段
done

until [條件]
do 
 程序段
done

調試腳本:
sh [-nvx] scripts
-n 不執行腳本,查詢腳本內的語法,若有錯誤則列出
-v 在執行腳本之前,先將腳本的內容顯示在屏幕上
-x 將用到的腳本內容顯示在屏幕上,與-v稍微不同

注意:
1.在條件判斷時一般使用"$var"的形式,這是為了防止出現var為空的情況,例如:if [ $var = "yes" ]中,如果var為空,那么會出現if [ = "yes" ]的情況,這是不合法的,而if [ "$var" = "yes"]則不會出現該問題。