bash基础 1           概念 2           语法 3           bash脚本例子 4           Vi编辑器 5           相关拓展

 

bash(sh,pdsh扩充): GNU Bourne-Again Shell

 

sh:Bourne Shell,编程优秀,用户交互不便。         

csh:C Shell,编程接口不如sh,用户界面友好,与C语言语法相似。      ——>tcsh

ksh:Korn Shell,集成了sh和csh的优点,并完全兼容sh。               ——>pdsh(Public Domain Korn Shell)

zsh

 

2           语法

2.1         变量,数据类型

变量定义:不含保留字(例如“-,*”等),不含空格。

变量的引用:赋值,for循环前不需带$;其他情况引用变量需要带"$"(例如,打印,运算等)。

数据类型:shell变量没有数据类型。

shell语句:=左右不能有空格;shell语句不以”;“结尾。

                                                                                                

2.1.1        整数运算(+-*/%):let,expr

1)let:双引号

例如,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循环

变量的作用:整数,字符串,计数,文件属性

 

 

次元立方