变量

变量赋值

shell 中的变量分为局部变量和环境变量,环境变量在声明的时候需要使用 export ,所谓的 export 就是指将原先局限与脚本内部的变量 export 到环境中,这样子进程都会继承这个变量。

shell 的变量的赋值的等号两侧不能有多余的空格,这是因为一旦出现空格,那么就会被 shell 识别成一条命令。

var='Hello world' # succ
export var='Hello world' # succ
var = 'Hello world' # error: recongize the `var` as a command

我不确定 shell 中的变量是否有数据类型,不过看上去类型非常弱,比如两个字符串可以进行算数加法

a='5'
b='3'
echo$((a + b)) # 8

变量使用

  • $var 或者 ${var} 来引用变量。
  • $(command) 来引用命令的输出。
  • $((a + b)) 来进行数学计算。
  • $1, $2 等表示传递给脚本的参数,$# 表示参数的数量,$@, $* 用于引用所有参数。

流程控制

循环

需要注意的是,似乎下文列到的循环只在 bash 中使用,而在 sh 中并不支持:

for (( i=1; i<=n; i=i+1 ))
do
    s=$(( S{s}+s{i} ))
done
 
for var in con1 con2 con3
do
    commands
done
 
for c in {a..z}
do
    echo$c
done