shell语法

Table of Contents

1 Shebang

“#!”出现在Linux/Unix脚本第一行,称作为“Shebang”。源于发音符号“#”(读作Sharp)和“!”(读作Bang),合起来就是Sharp-bang,“Shebang”是“Sharp-bang”的缩写。

2 数组

array=(item1 item2 item3)
# 索引数组
echo ${array[0]}
# 更新数组元素
array[0]=xx
# 遍历
for item in ${array[@]}
do
    echo $item
done

取数组长度:

  取数组长度:${变量名[*]}或${变量名[@]}
array=(item1 item2 item3)

echo ${#array}

3 子程序

function hello {
    echo hello world
}

function hello1() {
    echo hello world
}

3.1 子程序参数

$n:n为第几个参数。

function say {
    echo "you say: $1"
}

# $  say hello
# you say: hello

4 条件判断

if [ 表达式 ]; then
    ...
elif [ 表达式 ]; then
    ...
else
    ...
fi

表达式组合:

[ expr ] # 表达式为真
[ ! expr ] # 表达式不为真
! [ expr ] # 同上
[ expr1 -a expr2 ] # 类似:if(expr1 && expr2)
[ expr1 -o expr2 ] # 类似:if(expr1 || expr2)

4.1 [和test的区别

“[ .. ]”之间是有空格分开的,不能紧凑地写在一起,因为“[”实际上是一个系统命令:

$ which [
/usr/bin/[

“[”之后的都是命令的参数,所以需要空格分割。为了统一,需要用“]”作为最后一个参数。

“[”其实和test命令是等价的,记不住表达式的话,可以:man test。

5 环境变量和shell变量

在shell中赋值的变量叫作shell变量,变量只对当前shell有效;需要让所有通过当前shell运行的进程都可以访问的变量,就是环境变量,环境变量一般用于对某些程序做一些“个性设置”。

定义变量的语法如下:

var=value

shell会把空格当作命令参数,所以定义变量的“=”之间是不能有空格的,如果你写成:

var = value

shell会把var当作一个命令,“=”和“value”是它的参数。

引用变量:

${var}或$var

例,分割字符串:

分割字符串:
$  s="hello world"
$  echo ${s:0:5}
hello

通过export关键字,可以定义一个环境变量。

5.1 IFS

可以使用$IFS变量设定分割符,例如:

IFS=':'

然后调用:

read $r1 $r2 $r3 $r4 $r5 $r6 $r7 < /etc/passwd

因为passwd用了“:”将内容分割成了7段,所以这样就可以将7段的值分别存到了7个变量中了。

5.2 EDITOR,默认编辑器设置

export $EDITOR=vim

使用Ctrl+x+e组合快捷键可以打开默认编辑器(对Zsh无效)。