bsh簡要介紹

   bsh 是sco open server中的用戶缺省shell,也是許多其它OS中支持的shell。另外,由於ksh是bsh的擴展,幾乎所有的bsh腳本都可在ksh中運行。所以有必要對bsh有所瞭解。
    在sco open server中bsh命令位於/bin/sh,在某些系統中可能叫做/bin/bsh。

    shell的啓動和環境

1. shell啓動時的選項
-a 將所有變量輸出
-c "string" 從string中讀取命令
-e 使用非交互模式
-f 禁止shell文件名產生
-h 定義
-i 交互式模式
-k 爲命令的執行設置選項
-n 讀取命令但不執行
-r 受限模式
-s 命令從標準輸入讀取
-t 執行一條命令,然後退出shell
-u 在替換時使用未設置的變量將會出錯
-v 顯示shell的輸入行
-x 跟蹤模式,顯示執行的命令
以上不衝突的選項可以組合使用。

2. 執行sh -r 或者/bin/rsh可以進入受限模式。在受限模式下,
用戶不能改變自己的目錄,不能修改PATH變量,不能使用絕對路徑名
執行命令,也不能重定向輸出。

3. 使用set改變shell選項。
set -x 是加上該選項
set +x 是去掉該選項

4. 用戶shell啓動文件爲.profile,你可以在該文件中添加環境變量和腳本。

5. shell環境變量
CDPATH cd命令使用的搜索路徑
IFS 內部的域分隔符,一般爲空格符、製表符或換行符
PS1 主命令提示符,默認$
PS2 從命令提示符 默認>

    特殊字符及其含義

1. shell變量名使用的特殊字符
$# 傳給命令shell的參數個數
$- 在shell啓動或者使用set命令時提供選項
$? 上一條命令執行後返回的值
$$ 當前shell的進程號
$! 上一個子進程的進程號
$@ 所有的參數,每個都用雙括號括起。
$* 所有參數,用雙括號括起。
$n 位置參數值,n表示位置。 $0是當前shell腳本名,$1是第一個參數,……

2. 通配符
ls [!m]* 尋找不以m開頭的文件名

3. 數據或程序控制使用的特殊字符
` `命令替換,重定向一條命令的輸出作爲另一條命令的輸入。(注意啦:是與單引號相反的那個符號`)
4. 使用雙引號,始其中的變量形式可以引用值
使用/逃逸符,表示其後的字符不具有特殊含義或者不是shell的函數。

    shell變量

9.2.1 用戶定義變量
$count=1
$x=20 $y=aaaa
變量未賦值使用時,shell並不報告錯誤,而是給變量一個空值。

9.2.2 條件變量替換
${count:-2} 意義爲:引用count變量,如果前面未設置該變量,則給其賦缺省值2
${count:?message} 意義爲:引用count變量,如果前面未設置該變量,則顯示message

9.2.3 readonly var 將var設置爲只讀變量 
設置的變量都是在子shell中起作用,也就是說是局部變量。用export命令可以讓變量被其他子shell識別。

    運算及條件循環結構

9.3.6 對shell變量進行算術運算
expr integer operator integer
operator 有:+ - * / % 其中 * 要使用/*進行轉義
沒有括號進行優先運算,所以需要用``分層運算: expr `expr 5 + 7` / 3 

9.3.8 條件判斷:
if command_1
then
  command_2
  command_3
else
  command_4
  command_5
fi

if command
then
  command
elif command
then
  command
elif command
then
  command
fi

test命令進行條件測試:
test condition
condition: 測試字符串: str1 = str2 有相同內容,相同長度時候爲真
str1 != str2
-n str1 串長度>0時候爲真
-z str1 串長度=0時候爲真(空串)
str1 非空時候爲真
測試兩整數之間關係
int1 -eq int2 =
int1 -ne int2 !=
int1 -gt int2 >
int1 -ge int2 >=
int1 -lt int2 <
int1 -le int2 <=
測試文件
-r file 用戶可讀時候爲真
-w file 用戶可寫
-x file 用戶可執行
-f file 爲正規文件時候
-d file 爲目錄文件時候
-c file 爲字符特殊設備文件時候
-b file 爲塊特殊設備文件
-s file 不是0字節文件時候
-t file 當文件描述符制定的設備是終端時候

and or 組合多條條件

交互式讀入數據
read var1 var2 var3

case 語句:pattern中可用 | 或者 or 聯結不同模式
case "$var" in
pattern1)
  command
  command;;
pattern2)
  command
  command;;
*)
  command
  command;;
esac

空命令用
:

循環語句:
while condition
do
  command
  command
done

until condition
do
  command
  command
done

shift 命令可將參數變量往前移動

for var in arg1 arg2 arg3 ...
do
  command1
  command2
done
for循環中var依次取值arg1,arg2,arg3進行循環

break , continue可以用在循環中

trap

command1 && command2 意義爲:只有command1成功執行,纔會執行command2
command1 || comand2 意義爲:只有command1 執行失敗,纔會執行command2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章