您好,登錄后才能下訂單哦!
1.什么是shell
2. 還是hello world程序
3. shell中的變量
3.1 系統變量
3.2 用戶定義變量
3.2.1 用戶定義變量規則
3.2.3 shell如何使用變量
3.2.3 全局變量 vs 局部變量
4. shell編程中的控制結構
4.1 條件判定
4.1.1 簡單條件判定
4.1.2 組合判定
4.2 if - else
4.3 for
4.4 while
4.5 case
5. shell中的函數
5.1 函數聲明和定義
5.2 函數調用
6. shell腳本調試
6.1 萬能的echo
6.2 兩個命令
7. 參考資料及shell腳本下載
shell扮演者操作系統內核和用戶的中間人的角色,用戶通過鍵入shell command,然后shell通過解析用戶輸入,然后將請求轉發給操作系統的內核進行處理。
1. 一個系統可以存在多個shell,可以通過cat /etc/shells命令查看系統中安裝的shell,不同的shell可能支持的命令語法是不相同的。
2. 可以通過echo $SHELL查看當前使用的shell
首先使用vim編輯器(或者是linux下任意的文本編輯器)編寫文件helloshell.sh(沒有必要使用.sh后綴名):
#!/bin/bash
echo "hello shell";
保存上面的文件,增加該文件的執行權限:
xuqiang@ubuntu:~/shell$ sudo chmod +x ./helloshell.sh
運行該shell程序:
xuqiang@ubuntu:~/shell$ ./helloshell.sh
hello shell
通過上面的程序沒有什么實際的含義,但是通過第一個shell程序了解shell程序的執行過程。
linnux下的shell腳本中的變量分為“系統變量”和“用戶自定義變量”,可以通過set命令查看那系統變量。
xuqiang@ubuntu:~/shell$ set
... 略去內容
xuqiang@ubuntu:~/shell$ echo $HOME
/home/xuqiang
shell中用戶可以自定義變量,shell中的變量是沒有數據類型的,shell將根據當前的環境自動進行轉化,例如:
msg="hello world"
上面的語句定義變量msg,并設置初始值是為hello world。
Tip 1. 需要注意的是定義變量時,=兩邊是沒有空格的
3.2.1 用戶定義變量規則
變量必須是以字母開頭,后跟字母或者是下劃線,變量的命名是大小寫敏感的,并且可以定義一個變量的值為NULL。
xuqiang@ubuntu:~/shell$ vech=
xuqiang@ubuntu:~/shell$ echo $vec
3.2.2 shell中如何使用變量
如果想要得到shell變量中存儲的值的話,需要在變量名前增加$符號,例如:
xuqiang@ubuntu:~/shell$ vech="value"
xuqiang@ubuntu:~/shell$ echo $vech # this will print the value of vech
value
xuqiang@ubuntu:~/shell$ echo vech # this will print the string "vech"
vech
3.2.3 全局變量 vs 局部變量
默認在shell中編寫的變量全部是局部變量,如果重新打開console的話,那么這些變量將全部丟失,全局的變量可以寫在文件~/.bashrc文件。
在shell中條件判斷是通過test命令或者是[ ]實現, 判斷條件如下:
數學運算:
a -eq b :a == b
a -ne b : a != b
a -lt b : a < b
a -le b : a <= b
a -gt b : a > b
a -ge b : a >= b
string比較:
string1 = string2
string1 != string2
string1 : string1 不是NULL,或者是沒有定義
邏輯運算符:
! : not
exp1 -a exp2 : a && b
exp1 -o exp2 : exp1 || exp2
!/bin/sh#
# see whether arguments is positive
#
if [ $# -ne 1 ]
then
echo "$0 : you must give/supply one integers"
exit 1
fi
if test $1 -gt 0
then
echo "$1 number is postivie"
else
echo "$1 number is negative"
fi
#!/bin/sh
osch=0
echo "1. unix(sun os)"
echo "2. linux(red hat)"
echo -n "select your os choice [1 or 2] ?"
read osch
if [ $osch -eq 1 ]
then
echo "you pick up unix"
else
#
# nested if
if [ $osch -eq 2 ]
then
echo "you pick up linux"
else
echo "what you donot like unix/linux"
fi
fi
#!/bin/sh
#
# test the if .. elif .. else
#
if [ $1 -gt 0 ] ; then
echo "$1 is positive"
elif [ $1 -lt 0 ] ; then
echo "$1 is negative"
elif [ $1 -eq 0 ] ; then
echo "$1 is zero"
else
echo "$1 is not a number"
fi
!/bin/sh
#
# test for
#
for i in 1 2 3 4 5
do
echo "welcome $i times"
done
#!/bin/bash
for (( i = 0; i <= 5; i++ ))
do
echo "welcome $i times"
done
Tip 1. 注意程序中使用的shell腳本的類型
#!/bin/bash
for(( i = 1; i <= 5; i++ ))
do
for(( j = 1; j <= 5; ++j ))
do
echo -n "$i"
done
# print a new line
echo ""
done
#!/bin/bash
#
# test while loop
#
n=$1
i=0
while [ $i -le 10 ]
do
echo "$n * $i = `expr $i \* $n`"
i=`expr $i + 1`
done
#!/bin/bash
#
# script to test case statement
#
action="update"
case $action in
"update")
echo "update the db"
;;
"select")
echo "select from db"
;;
"delete")
echo "delete from db"
;;
*)
echo "no action"
;;
esac
下面的程序中定義函數demo,向函數傳遞的所有參數表示為$*,第一個參數$1,第二個參數$2, 依次類推。
#!/bin/bash
function demo()
{
echo "all function args : $*"
echo "the first arg : $1"
echo "the second arg : $2"
echo "the third arg : $3"
}
# call the function
demo -f foo bar
shell中向函數傳遞參數是通過直接在函數調用后面添加參數完成,在函數中,傳遞的參數通過$1得到。
shell的腳本調試是比價惡心的,這里僅僅是提供一些常規性的調試方法,最簡單的就是使用echo函數打印出變量的值從而達到調試目的。
shell腳本執行可以通過./shell-filename.sh的形式執行,另外的一種形式是通過bash ./shell-filename.sh的形式執行,同時在執行腳本時,可以使用-v或者是-x參數打印程序執行信息。
-v:默認打印shell讀取的內容
-x:將命令“展開” 之后打印
例如對于下面的程序:
!/bin/sh
# for debug shell script
#
tot=`expr $1 + $2`
echo $tot
如果使用-v選項,結果如下:
xuqiang@ubuntu:~/shell$ sh -v ./debug.sh 2 5
#!/bin/sh
#
# for debug shell script
#
tot=`expr $1 + $2`
echo $tot
7
如果是使用-x選項的話,結果:
xuqiang@ubuntu:~/shell$ sh -x ./debug.sh 2 5
+ expr 2 + 5
+ tot=7
+ echo 7
7
轉載地址:http://www.cnblogs.com/xuqiang/archive/2011/04/27/2031034.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。