首页 > 学院 > 操作系统 > 正文

bash基础

2024-06-28 13:24:13
字体:
来源:转载
供稿:网友
bash基础

1 概念

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循环

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

次元立方


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表