天天看點

16、常用shell指令方法

1、shell基本

16、常用shell指令方法

2、父shell在執行shell指令時,通常是建立子shell,繼承父shell環境,執行指令,退出,相關環境銷毀;父shell得到子shell的退出狀态。

通過指令.或source來使其有目前環境中執行,而不建立子程序。

3、通配符與運算符

16、常用shell指令方法
16、常用shell指令方法

4、轉義

單引号

   硬轉義,單引号内的字元就是其字面意義

雙引号

    會進行變量替換

反單引号----$()

    會把指令執行的輸出,替換;相當于函數調用,嵌套的變量會一直解析

****/home/edwardlewis/altraman # echo 'date'

date

****:/home/edwardlewis/altraman # echo "date"

****:/home/edwardlewis/altraman # echo `date`

Fri Aug 19 07:00:02 CST 2011

5、變量

變量指派:    name=value

變量引用:       $name

合法的變量名: 字母、下劃線、數字

=号兩邊不容許有空格(否則可能解析成指令,預設情況下IFS為空格)

$name是${name}的縮寫

$?

上一指令的退出狀态

$!

最後一個背景程序的pid

$0

目前程序的程式名稱

$$

目前程序的程序id号

$n

n為1,2,…n腳本或程式的參數

$@

腳本或程式的所有參數

$#

腳本或程式的參數個數

$UID

目前使用者的UID

$LOGNAME

目前使用者的使用者名

$HOSTNAME

主機名

$RANDOM

1-32767之間随機數

$SECONDS

以消耗的秒數

$PWD

目前工作目錄

$OLDPWD

最後一次cd前的工作目錄

~

HOME

    環境變量env是bash或使用者預設值的變量,可以被繼承并直接使用;目前變量set。local定義局部變量。

a.永久設定

export name=value

./foobar.sh

b.隻對一個指令設定

name=value

6、結構語句

1)if

[[ ]]  表達式,測試字元串,檔案

(( ))  表達式,測試數字計算結果

指令的退出碼($?) 為0時,代表true,執行成功

* 比對零個或多個任意字元

?比對一個任意字元

[] 字元組,可以比對字元組中的一個字元

A|B ,A 或者B

示例程式

i=1;

while (( i <= 10 ));

do

((i++))

done

echo i:${i}

for var in *.html

if [[ -h $var ]];

    then "Yes"

fi

7、函數

調用:需要先定義後調用,名字+參數(和調用一個指令完全一緻)

參數:$1,$2,……$#,$@

傳回值:标準輸出

退出狀态:return $num;或最後一個指令的退出狀态(盡量在$?中傳回失敗碼)

注意:函數必須先定義,後調用(local可以定義局部變量)

8、塊重定向

如if,while語句塊,{}

塊中共享同一檔案描述符(統一重定向)

除非塊中自行打開關閉

{

echo msg1

echo msg2

} >> "$log"

9、簡要說明echo 和print 有何差別?

① print有傳回值,成功就傳回1,失敗就0,而echo沒有傳回值

② echo函數中,可以同時輸出多個字元串,而在print函數中則隻可以同時輸出一個字元串。

int print ( string arg)

Outputs arg. Returns 1, always. 

void echo ( string arg1 [, string argn...])

Outputs all parameters. 

10、其他

ps -ef | grep 'http*' | grep -v 'grep' | wc -l

包含正規表達式盡量用單引号,防止轉義。

參考: