2023年11月27日发(作者:)

linux下的shell脚本(基本语法)

linux下的shell脚本(基本)

Shell是⼀种脚本语⾔,那么,就必须有解释器来执⾏这些脚本,常见的脚本解释器有:

bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命

令⼀共有40个。

sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。

另外还有:ash、 csh、 ksh等。

常见的编程语⾔分为两类:⼀个是编译型语⾔,如:c/c++/java等,它们远⾏前全部⼀起要经过编译器的编译。另⼀个解释型语⾔,执⾏时,需

要使⽤解释器⼀⾏⼀⾏地转换为代码,如:awk, perl, python与shell等。

Shell 经过了POSIX的标准化,所以它是可以在不同的linux系统上进⾏移植。

关于注释的问题: 在shell中使⽤#进⾏注释,注意,sh⾥⾯没有多⾏注释,只能每⼀⾏加⼀个#号;

第⼀个shell脚本程序:

country="China"

echo $country echo ${country} echo "I love my ${country}abcd!"

#这个需要有{}的;

重定义变量: 直接把变量重新像开始定义的那样⼦赋值就可以了:

country="China" country="ribenguizi"

image

@ 的区别为: @ 都表⽰传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"2" … "

*" 会将所有的参数作为⼀个整体,以"2 …

@" 会将各个参数分开,以"2" … "$n" 的形式输出所有参数。

$? 可以获取上⼀个命令的退出状态。所谓退出状态,就是上⼀个命令执⾏后的返回结果。退出状态是⼀个数字,⼀般情

况下,⼤部分命令执⾏成功会返回 0,失败返回 1。

Shell中的替换

转义符:

在echo中可以⽤于的转义符有:

image

使⽤ echo 命令的 –E 选项禁⽌转义,默认也是不转义的; 使⽤ –n 选项可以禁⽌插⼊换⾏符;

使⽤ echo 命令的 –e 选项可以对转义字符进⾏替换。

另外,注意,经过我的实验,得到:

echo "" #得到 echo -e "" #得到 echo "" #得到 echo -e "" #得到

命令替换:

它的意思就是说我们把⼀个命令的输出赋值给⼀个变量,⽅法为把命令⽤反引号(在Esc下⽅)引起来. ⽐如:

directory=`pwd` echo $directory

变量替换:

image

⽐如:

a=10 b=20

字符串运算符:

image

⽂件测试运算符:

单引号的限制:

1. 单引号⾥的任何字符都会原样输出,单引号字符串中的变量是⽆效的;

2. 单引号字串中不能出现单引号(对单引号使⽤转义符后也不⾏)。

双引号的优点:

1. 双引号⾥可以有变量

2. 双引号⾥可以出现转义字符

拼接字符串:

country="China"

echo "hello, $country" #也可以 echo "hello, "$country" "

获取字符串长度:

string="abcd"

echo ${#string} #输出 4

-s, ⽤于去掉指定的⽂件的后缀名;

basename /home/yin/ ->

basename -a /home/yin/ /home/zhai/ -> basename -s .txt /home/yin/ -> 1

basename /home/yin/ .txt -> 1

得到路径名(不带⽂件名)使⽤ dirname命令:

${array_name[index]}

读取数组的全部元素,⽤@或*

${array_name[*]}

${array_name[@]}

获取数组的信息:

取得数组元素的个数:

1 abc

单引号与双引号效果⼀样

printf '%d %sn' 1 "abc"

1 abc

没有引号也可以输出

printf %s abcdef

abcdef

格式只指定了⼀个参数,但多出的参数仍然会按照该格式输

a=10 b=20

if [ b ] then

echo "a is equal to b"

else

for 变量 in 列表 do command1

command2

...

commandN done

command ⼀般为条件表达式,如果返回值为 false,则继续执⾏循环体内的语句,否则跳出循环。

类似地, 在循环中使⽤ break 与continue 跳出循环。 另外,break 命令后⾯还可以跟⼀个整数,表⽰跳出第⼏层循

环。

Shell函数

Shell函数必须先定义后使⽤,定义如下,

function_name () {

Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本。使⽤:

. filename