原創博文,轉載請標明出處--周學偉 http://www.cnblogs.com/zxouxuewei/tag/
從程序員的角度來看, Shell本身是一種用C語言編寫的程序,從用戶的角度來看,Shell是用戶與Linux操作系統溝通的橋梁。用戶既可以輸入命令執行,又可以利用 Shell腳本編程,完成更加復雜的操作。在Linux GUI日益完善的今天,在系統管理等領域,Shell編程仍然起着不可忽視的作用。深入地了解和熟練地掌握Shell編程,是每一個Linux用戶的必修 功課之一。
Linux的Shell種類眾多,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell語言的語法有所不同,所以不能交換使用。每種Shell都有其特色之處,基本上,掌握其中任何一種 就足夠了。在本文中,我們關注的重點是Bash,也就是Bourne Again Shell,由於易用和免費,Bash在日常工作中被廣泛使用;同時,Bash也是大多數Linux系統默認的Shell。在一般情況下,人們並不區分 Bourne Shell和Bourne Again Shell,所以,在下面的文字中,我們可以看到#!/bin/sh,它同樣也可以改為#!/bin/bash。
一.基本語法
1.變量:export 變量全局
#!/bin/bash num=$1
export num echo $num
2.條件判斷
if [[ condition ]]; then #statements fi
#!/bin/bash
if [[ $1 == 1 ]]; then echo $1 else echo "value is not 1" fi
常用的判斷參數列表
3.case分支
#!/bin/bash case $1 in 1) echo "the value is 1";; 2) echo "the value is 2";; 3) echo "the value is 3";; 4) echo "the value is 4";; *) echo "defult value" esac
4.循環語句for
#方法1
for (( i = 0; i < 10; i++ )); do #statements done
#方法2
for i in words; do
#statements
done
例程:
#!/bin/bash for (( i = 0; i < 10; i++ )); do echo "the value is $i" done
5.while循環
while [[ condition ]]; do #statements done
例程:
#!/bin/bash i=$1 while [[ $i != 0 ]]; do echo "value is $i" let "i=i-1" done
6,函數
- 1、必須在調用函數地方之前,聲明函數,shell腳本是逐行運行。不會像其它語言一樣先預編譯。一次必須在使用函數前先聲明函數。
- 2、total=$(fSum 3 2); 通過這種調用方法,我們清楚知道,在shell 中 單括號里面,可以是:命令語句。 因此,我們可以將shell中函數,看作是定義一個新的命令,它是命令,因此 各個輸入參數直接用 空格分隔。 一次,命令里面獲得參數方法可以通過:$0…$n得到。 $0代表函數本身。
- 3、函數返回值,只能通過$? 系統變量獲得,直接通過=,獲得是空值。其實,我們按照上面一條理解,知道函數是一個命令,在shell獲得命令返回值,都需要通過$?獲得。
#!/bin/bash function add() { echo $1 $2 return $(($1+$2)) } value=$(add $1 $2); echo $value,$?
7.數組
# 取得數組元素的個數 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得數組單個元素的長度 lengthn=${#array_name[n]}
讀取數組元素值的一般格式是:
${array_name[index]}
valuen=${array_name[2]}
例程
#!/bin/bash name=(a b c d e f g) length=${#name[@]} echo $length for (( i = 0; i < $length; i++ )); do echo valuen=${name[$i]} done