返回   ShareGet 社群討論 > ≡ 電腦網路 ≡ > □ -- Unix & Linux

發表新主題 回覆
 
主題工具 顯示模式
  #1  
舊 2005-12-04, 01:57 PM
kazaya 的頭像
原來傷害最深的
 
註冊日期: 2004-05-31
來自: 是那些不肯同你說真話的人
文章: 8,847
給予: 45 | 感謝 222 | 共 123 篇
積分: 25189 | 給分能力: 98
[轉貼] 第九章 Shell Scripts

第九章  Shell Scripts
一. 何謂scripts :
將我們想要執行的一些內容,藉由程式的組合寫入一個檔案中,此檔案就稱之為scripts file。
藉由執行此scripts file,便可得到一連串執行的結果。
Scripts最基本的用法是將命令列上所輸入的連續指令統合於scripts中,只要
執行此scripts就等於執行一連串的指令敘述。

二. 編寫scripts時的習慣做法
1. #!/bin/bash => 宣告使用的shell為bash,此為scripts的第一行敘述。
2. 註明此scripts的用途、簡易描述、作者、建檔日期等等。
3. 最後才開始編寫scripts。
4. 完成後記得將此scripts改成可執行:
# chmod 755 scripts 或 # chmod +x scripts,然後才可執行該scripts。
# ./scripts 亦可執行如下: # sh scripts
例. barry$ vi scriptfile
#!/bin/bash
# scriptfile : test
# author : barry
# date : 2002.3.10
echo “Hello,everybody.”
echo –n “my linux version is : “
uname –r
→ 編輯好後,存檔離開。然後修改此scriptfile為可執行。
$ chmod +x scriptfile 修改完後就可執行試試。
$ ./scriptfile
Hello,everybody.
My linux version is : 2.4.18-3

Note : 執行scripts時,會由上至下,由左至右依序執行,但要是遇到迴圈
     或函式時,則為例外。
     if [ … ] 內,一般只能有一條件判斷式,而[…]與[…]間可用 || 或
&& ( or.and ) 做複合式判斷。

三. 判斷式 :
1. 判斷檔案或目錄的運算式
-d  dir -f  file -r  read -w  write
-x  execute -e  exist -s  size (檔案大小不等於0)
-u  SUID -g  SGID -k  sticky bit
例. if [ -f /etc/passwd ];then
→ 如果passwd是檔案為真,然後就執行…。

2. 判斷數值的運算式 :
-eq  等於 -ne  不等於 -gt  大於
-ge  大於等於 -lt  小於 -le  小於等於
-a  and -o  or
例. $a = 3 –a $b = 5

3. 判斷字串的運算式 :
假設A.B為字串
A = B A != B
-z A  如果A是空字串為真,…
-n B  如果B非空字串為真,…
-a.-o同數值判斷式。


四. if 判斷式 : if…then…elif…then…else…fi
例. a=3
  b=5
if [ “$a” –gt 6 –o “$b” –le 3 ];then
echo “it’s good.”
else
echo “it’s bad.”
fi
→ 如果3>6或5≦3為真,則output screen: it’s good.
否則output screen: it’s bad.

例. a=mother
b=father
if [ “$a = mother –a “$b” !=father ];then
echo “the description is true.”;else
echo “the description is false.”
fi

例. if [ -f /etc/passwd ];then
cp /etc/passwd .
echo “copy /etc/passwd to here.”;else
echo “the file does not exist.”
fi
五. while…do…done 當條件成立時執行迴圈,直到條件不成立為止。
例. x=0
while [ “$x” –le 10 ]
do
echo “current value of x is : $x”
x=$(expr $x + 1)
sleep 2
done
說明 : # expr 6  6
# expr 5 + 10  15
# a=3
# b=$(expr $a + 5)
 上式可寫成 b=`expr $a + 5`
# echo $b  8
# c=$(($a+$b))
 上式可寫成 c=$(expr $a + $b)=`expr $a + $b`
# echo $c  11
sleep 2 為讓程式暫停兩秒再執行。
Note: until…do…done 是與while相反的語法,在此就不說明。

六. for…in…do…done :
for 變數名稱 in 變數值1 變數值2 … do…done
in後面接幾個變數值,迴圈便執行幾次。
例. for x in 5 15 20
do
if [ “$x” –lt 18 ];then
echo “the value of x = $x”;else
echo “the value of x is too big.”
fi
sleep 3
done

七. read 變數名稱:
執行scripts時若遇到read,會出現交談模式,等待您從鍵盤輸入,而所輸入
的內容,便是此變數名稱的變數值。
例. echo –n “Enter your name : “
read name
if [ -z “$name” ];then
echo “you do not tell me your name.”
else
echo “Hello!$name,how are you ?”
fi

八. case $變數名稱 in
變數值等於in後面所列選項中的其中一個時,便執行那一個選項的敘述,
一般常用來與read作搭配。
例. echo “How old are you ?”
echo “1. 15~20 years old”
echo “2. 21~30 years old”
echo “3. 31~50 years old”
echo –n “Enter your choice : “
read choice
case $choice in
1) echo “you are too young.”;;
2) echo “your experience is not enough.”;;
3) echo “you have earned much money.”;;
*) echo “see you next time.”;;
esac
說明: 選項中” * “表示您所輸入資料未包含在以上選項中,或者您根本未
   輸入您的選擇。
   另外要記得句子結尾加上”;;”,以作為該行的結束。

九. 函式:函式一般都是程式呼叫後才會執行。
例: user()
{
echo “preparing to add a new user”
sleep 1
useradd
}
echo “1. add user”
echo “2. exit”
echo –n “Enter your choice : “
read choice
case $choice in
1) user;;
2) exit;;
*) echo “you do not choose.”
esac

十. echo $#  表示在命令列上輸入scripts名稱後,scripts後面共接幾個引數。
echo $*  顯示scripts後所接的引數名稱。
  echo $1  表示scripts後面所接的第一個引數名稱。可以到 $9。
  echo $0  主程式名稱。
  echo $$  當前shell的pid。
echo $?  返回狀態,也就是表示最後一個程式的狀態,若顯示為0,一般表示沒有錯誤,若顯示為其他數字表示此執行程式有問題。
       至於會顯示什麼數字,就要看如何設計scripts了。

例. if [ “$# -ne 1 ];then
echo “usage: $0”;else
echo “the argument is $1”
fi

十一. 例: x=5
y=10
if [ “$x –eq 5 ]&&[ “$y” –eq 10 ];then
echo “both condition is true.”;else
echo “the conditions are not true.”
fi

補:# CMD1 && CMD2  CMD2 is executed when CMD1 is true.
# CMD1 || CMD2  CMD2 is executed when CMD1 is false.
# CMD1&CMD2&CMD3
→CMD1及CMD2為背景執行,只有CMD3為前景執行。
# CMD1;CMD2;CMD3
→CMD1執行完執行CMD2,CMD2執行完執行CMD3,不論
    程式有無存在,都會依序執行。
__________________
如果您覺得"文章小說討論區"所發的主題不錯
請不要吝嗇 在主題 " 點閱" 及 並給予 發文者一些鼓勵
---------------------------------------------
為了防止世界被破壞  為了保護世界的和平
貫徹下載與燒錄的邪惡  可愛又迷人的盜版角色
MP3....Program...  我們是穿梭在網際網路中的盜版大隊~~
拷貝 拷貝的明天正等著我們~~
就是這樣....喵~~@@
回覆時引用此文章
發表新主題 回覆

書簽

主題工具
顯示模式

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用
論壇跳轉


所有時間均為GMT -5。現在的時間是 11:12 PM


Powered by vBulletin® Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.