编写shell脚本

2020 / 03 / 27

数据类型

hello=lalala
echo $hello
echo ${hello}

命名和js一样的,需要young字母数值下划线,{}用来表示一个变量的边界,不然有时候就会和其他的字符串粘在一起

字符串

字符串可以是单引号,也可以是双引号,也可以不用引号,但是三者是略有区别的,""中可以有变量,比如

a=hello
b='$a world'
b=$a world
b="$a world"

第一个无法识别为变量,第二个会报错,第三个正常

数组

shell脚本中只支持一维数组,定义数组需要用圆括号 (),通过${}来取数组某个下标的值。

nums=(1 2 3)
nums=([0]=1 [1]=2 [2]=3)
echo ${nums[2]}

获取长度可以用

echo ${#nums[*]}

不同于js的是,他的下标可以跳跃,但是并不会有undefined数据填充。比如js中直接指定数组第五个元素的值,那么数组的长度就会是五。但shell脚本中并不会。但却可以获取到对应下标的值。

输出到某个文件

echo hello
echo world >> test.txt

代码会输出一个hello到控制台,然后把world写入test.txt文件,没有test.txt会创建文件。

算数表达式

用let声明变量可以执行算数表达式

let a=1+1
let 'b = 2 + 3'
echo $a, $b

空格在shell脚本里一般有特殊含义,所以如果表达式里想要用空格,需要用引号包起来。

条件判断

hello=1

if [ 1 -eq 1 ]; then
echo 1=1
fi

if [ 1 = 1 ]; then
echo 1=1
fi

需要一个if fi对来表示条件判断语句的开始和结束,常见的操作符有

= 等于,用来判断字符串和数值

!= 不等于,用来判断字符串和数值

-eq 等于,数值判断

-ne

-le

也会有人推荐这么写

if [ 1 = 1 ]
then echo 2
fi

还可以这么些,test 1 = 2 可以返回true或者false

if 
test 1 = 2
then
echo 1 = 2
else
echo 1 != 2
fi

循环

for循环

for item in 1 2 3 4
do
echo $item
done

for循环语句的格式如上

while循环

num=0
while [ $num -lt 5 ]
do
num=$(($num+1))
echo $num
done

函数

声明函数的语法和js很相似,但shell脚本中可以省略function关键字

function foo(){
}

bar(){
}

函数执行的时候不需要$

function foo(){
echo hello
}

foo

$?可以获取某个脚本执行的结果,比如是否出错,也可以用来获取上个函数的返回值

function bar(){
return 10
}

bar

echo $?

函数局部变量用local关键词声明,这样外边就访问不到了

function bar(){
local a=1
echo $a
}

如果要给函数传参数,可以用下边的方式,其中$0表示执行的文件名,$1, $2, $3, $4分别hello, world in shell四个字符串

function foo(){
echo $0 $1 $2 $3 $4
}

foo hello world in shell


写评论
全部评论