13-2
基本敘述句
內容:
基本上,所有
Shell
命令都是 Shell script
的敘述句,譬如
ls、cp、cat、date
等等,或是由
Shell script
所新建立的命令皆是。為了提高
Shell script
程式的變化性,除了
Shell
命令外,其他都必須增加一些基本敘述句來輔助,以下介紹一些較常用的敘述句。
13-2-1
輸出敘述
– echo
echo
敘述是將資料輸出到終端機上,其資料可以是變數內容或文字訊息,範例如下($vi
ex7_4):
#! /bin/bash
#
file_name:ex7_4
echo $USER
echo "Good
luck to you"
echo Good
luck to you
echo
"Date: `date`" |
上述範例中,第一個敘述是將變數($USER)內容輸出;第二與第三個敘述是直接將訊息輸出,其中雙引號可有可無;第四個敘述是將命令(date)的結果一併輸出,注意必須使用反向單引號(`)。執行該命令稿之後的結果如下:
$
ex7_4
【執行
ex7_4
程式】
tsnien
Good luck
to you
Good luck
to you
Date: Thu
Jul 21 14:10:25 CST 2005 |
13-2-2
輸入敘述
- Read
Read
敘述是由鍵盤讀入資料,並存入變數內,範例如下:($vi
ex7_5)
#! /bin/bash
#
file_name: ex7_5
echo –n
“What is your name =>”
read name
echo
“Welcome, $name” |
其中
echo –n
表示沒有換行(Enter
輸入)的功能,當系統執行到 read name
時,會暫停並等待輸入,直到有 Enter
輸入,再將鍵盤輸入文字放入 name
變數內。另外,變數並不需要事先宣告,使用時就直接採用已包含宣告的功能。執行結果如下:
$
ex7_5
【執行
ex7_5
程式】
What is
your name =>Tien-shou
Welcome,
Tien-shou |
利用
read –p
語法,也可以達到相同結果,如下($vi
ex7_5_1):
#! /bin/bash
# file
name: ex7_5-1
read -p
"What is your name =>" name
echo
"Welcome, $name" |
13-2-3
設定位置變數
– Set
執行某些命令會出現類似欄位格式的多筆資訊,可利用
set
命令將訊息指定到位置變數內。以執行 date
命令為例,它會出現星期、月、日、時間等訊息,如利用
set
命令指定位置變數,其關係如圖 13-1
所示,程式範例如下($vi
ex7_6):
圖
13-1
設定位置變數範例
#! /bin/bash
#
file_name: ex7_6
set
`date`
【注意必須使用反向單引號】
echo
"Time: $4 $5"
echo "Day:
$1"
echo
"Date: $3 $2 $6" |
執行結果如下:
執行結果如下:
$
chmod u+x ex7_6
【設定成可執行檔】
$
ex7_6
【執行
set_scr
程式】
Time:
15:07:17 CST
Day: Thu
Date: 21
Jul 2005 |
13-2-4
數學運算
– expr
Shell script
同樣具有加(+)、減(-)、乘(*)、除(/)與求餘數(%)的運算功能,但執行這些運算時,都必須利用
expr
敘述句來完成(大部分的 Script
皆是如此),可先在提示符號($)底下測試運算功能,如下:
$ 3 +
4
【系統判斷
3
是輸入命令】
-bash: 3:
command not found
$
echo 3 + 4
【輸出
3 + 4
訊息】
3 + 4
$
echo expr 3 + 4
expr 3 + 4
$
echo `expr 3 + 4 `
【expr
執行運算功能,反向單引號】
7 |
第一個命令系統判斷
3
為輸入命令;第二與第三個命令僅輸出訊息(3 + 4
或
expr 3 + 4);第四個命令才是真正執行運算功能,其中
expr
運算敘述必須利用反向單引號(`)包括起來。以下用一個較複雜的範例,來實作各種運算子,範例如下:($vi
ex7_7)
#! /bin/bash
#
file_name: ex7_7
echo "Test
operator"
echo -n
"Please enter first number =>"
read
number1
echo -n
"Please enter second number =>"
read
number2
echo
"Calculated results:"
sum=`expr
$number1 + $number2`
【等號前後不可以有空格】
echo "
Sum = $sum"
dele=`expr
$number1 - $number2`
echo "
Dele = $dele"
echo "
Mult = `expr $number1 \* $number2`"
【\
抑制
*
特殊功能】
echo "
Div = `expr $number1 / $number2`"
echo "
Rem = `expr $number1 % $number2`" |
上述範例比較特殊的地方,星號(*)在
Shell
環境裡是代表 0
個或多個任何字元(請參考
4-6-2
節說明)的意思,因此必須在它的前面加上反斜線(\),表示抑制其特殊功能,並恢復原來字元的表示法(*
代表乘法)。上述範例執行結果如下:
[tsnien@localhost
shell]$ ex7_7
Test
operator
Please
enter first number =>320
Please
enter second number =>200
Calculated
results:
Sum =
520
Dele =
120
Mult =
64000
Div = 1
Rem =
120 |
|