bash基礎

 

1           概念

bash(sh,pdsh擴充): GNU Bourne-Again Shellshell

 

sh:Bourne Shell,編程優秀,用戶交互不便。         express

csh:C Shell,編程接口不如sh,用戶界面友好,與C語言語法類似。      ——>tcsh編程

ksh:Korn Shell,集成了sh和csh的優勢,並徹底兼容sh。               ——>pdsh(Public Domain Korn Shell)bash

zsh編輯器

 

2           語法

2.1         變量,數據類型

變量定義:不含保留字(例如「-,*」等),不含空格。函數

變量的引用:賦值,for循環前不需帶$;其餘狀況引用變量須要帶"$"(例如,打印,運算等)。spa

數據類型:shell變量沒有數據類型。命令行

shell語句:=左右不能有空格;shell語句不以」;「結尾。接口

                                                                                                

2.1.1        整數運算(+-*/%):let,expr

1)let:雙引號ci

例如,let "x=$x+1"

2)expr:`,空格,特殊字符前須要使用轉義符號\

例如,x=`expr $x + 4`,x=`expr $x \* 4`

【PS】不能進行浮點數運算,沒有浮點數數據類型。

【例子:算術運算,字符拼接,shell的無數據類型】

#!/bin/bash

x=2007

let "x=$x+1"

echo $x

 

x=`expr $x + 4`

echo $x

echo $(expr $x / 2)

x='Olmpic'$x

echo x=$x

 

y=12

y=`expr $y \* 2`

echo $y

 

2.1.2        賦值

x=200

let "x=$x+1"

x=’hello’$x

y=$(expr $x / 2)

y=`expr $y \* 2`

 

result=$(($result+$num))

num=$((num+1))

 

 

#result=1

num=1

result=$(($result+$num))

#num=$((num+1))

#echo $result

echo $(($a+1))

 

#echo $num

echo 'aaa'+$x

echo $((-123))

echo $(($z))

 

2.1.3        比較操做      

1)-eq,-ne,-gt和-ge,-lt和-le,-z(爲空),-n(非空)

2)=,!=,>(無>=),<(無<=)

【PS】

字符串比較時,儘可能不用-z,而用!-n代替。

能用1)儘可能不用2)。

 

2.1.4        按位操做

&,|

【位運算:】

ckm@bidc:~/zzhTest> echo $(expr 1 \& 0)

0

ckm@bidc:~/zzhTest> echo $(expr 1 \| 0)

1

#!/bibn/bash

if [ $str !-n ];then

echo null!!

fi

 

2.2         流程控制

2.2.1        if條件控制

if [ expression ] ;then statements

fi

 

if [ expression ] ;then statements

else   statements

fi

 

if [ expression ] ;then statements

else if  [ expression ] then statements

else  statements

fi

 

if [ expression ] ;then statements

elif  [ expression ] ;then statements

else  statements

fi

【PS】

若then換行,則then前無需加;。

[和]的後、前有空格。

 

2.2.2        case分支結構

case "$var" in

cindition1 ) statements;;

cindition2 ) statements;;

...

* ) statements;;

esac

 

 

2.2.3        for循環

for var in [ list ];do

 statements

done

【PS】

var 變量的引用不使用$。

<list>的元素用空格分隔。

           

 

2.2.4        while循環

while [ condition ]

do

statements

done

 

 

2.2.5        until循環

until [ condition ]

do

statements

done

 

 

2.2.6        break/continue

 

3           bash腳本例子

【hello world】腳本的執行:hello

#!/bin/bash

#變量的使用

str='hello world'

echo $str

echo str

 

--執行文件

bash hello

sh hello

chmod u+x hello

hello

 

【Linux經常使用命令】

vi zzhdir

#!/bin/bash

ls –a

--執行

sh zzhdir

 

【局部變量:局部變量的做用域(函數體內)】

#!/bin/bash

function test {

local var=world

echo $var

}

 

var=hello

 

echo $var

test

echo $var

【PS】局部變量:首次被賦值時,變量前面加上local。

 

【if條件:比較操做,if條件控制結構】

#!/bin/bash

a=10

if [ $a -gt 0 ]

then echo 1

else echo 2

fi

 

【if條件:帶參腳本】

#!/bin/bash

if [ $1 = 10 ];then echo right!

else echo wrong!

fi

--執行

sh test 123

【PS】$1用於匹配命令行的第1個參數。(bash中的保留字)

 

【case分支】

 

寫法一:

export LC_ALL=C    /*區分大小寫*/

var=A

case "$var" in

[a-z] ) echo 'lowercase letter!';;

[A-Z] ) echo 'lowercase letter!';;

[0-9] ) echo 'number';;

* ) echo other character!;;

Esac

 

寫法二:

var=A

case "$var" in

[[:lower]] ) echo 'lowercase letter!';;

[[:upper]] ) echo 'upper letter!';;

[0-9] ) echo 'number';;

* ) echo other character!;;

esac

 

【for循環:無in [list]】

for var ;do

 echo ok

done

--執行

sh test

sh test 1  "hello world" a

 

【for循環:i的做用域】循環體內部(do/done之間)

for i in $(seq 5)

do

echo $i

done

 

echo $i

--執行

sh test

 

【for循環:seq】

for i in `seq 1 5`;do

echo TEST!

done

 

【for循環:i的做用域】定義後的程序塊

for((i=1;i<=5;i++));do

echo $i

done

                                            

echo $i

--執行

sh test

 

【for循環:命令行參數】。

for param

do

echo $param

done

--執行腳本

sh test 123 456 789

【PS】未指定list,將打印全部命令行參數;當沒有命令行參數時,什麼都不打印

 

【while循環】

num=1

result=0

while [ $num -le 3 ]

do

result=$(($result+$num))

num=$((num+1))

done

 

echo $result

 

【until循環】

num=1

result=0

until [ $num -ge 3 ]

do

result=$(($result+$num))

num=$((num+1))

done

 

echo $result

 

【break/continue】

for i in `seq 1 5`;do

if [ $i = 3 ];the

continue

else echo $i

fi

done

 

 

4           Vi編輯器

命名模式:Esc鍵,「:」英文冒號,「wq」保存退出,「q!」強制退出

插入模式:aAiIuU

刪除單詞:dw

刪除整行:dd

字符串查找:「/」正斜槓

 

5           相關拓展

保留字

正則

函數

輸入,輸出: >,>>,2>,1>,>&

For循環

變量的做用:整數,字符串,計數,文件屬性

 

 

次元立方

相關文章
相關標籤/搜索