在bash中变量赋值按照下面的方式:
VARIABLE=2
并且你可以使用$VARIABLE(变量名)来引用变量。需要注意的是不要在=运算符的两边放置空格符,比如VARIABLE= 2、VARIABLE = 2、或者VARIABLE =2,这并不是语法错误,但是将会做完全不需要的事情(比如试图运行一个名字为2的程序,并将环境变量VARIABLE设置为空字符串)。
Bash变量并不要求全部大写,但是通常是大写的。
大多数你所使用的bash变量都是字符串。在bash中也有一些数组变量,但我并不是完全理解它们。
使用${}引用变量
有时某些变量,内容为file.txt,并且我想这样使用它:
mv $MYVAR $MYVAR__bak # wrong!
这段代码是无法工作的!它会去查找 MYVAR__bak变量,但这并不是一个真实存在的变量。
为了避免类似问题,你需要知道的仅仅是 ${MYVAR}和$MYVAR是一回事。所以你可以这样运行指令:
mv $MYVAR ${MYVAR}__bak # right!
全局变量,局部变量和环境变量
Bash有3种变量。我一般先想到(可能也是最常用)的是 环境变量 。
Linux上的每个进程实际上都有环境变量(您可以运行env查看当前设置的变量),但在Bash中,它们更易于访问。要查看名为MYVAR的环境变量,可以运行
echo "$MYVAR"
要设置环境变量,您需要使用export关键字:
export MYVAR=2
设置环境变量时,所有子进程将看到该环境变量。所以如果你运行export MYVAR=2; python test.py,python程序将MYVAR设置为2。
第二种变量是 全局变量 。同样像上面那样赋值。
MYVAR=2
在其他编程语言中他们表现得像全局变量。
还有 局部变量 ,它们的作用域只能存在于bash函数中。 我基本上从来没有使用过这样的函数(不像我写的其他编程语言),我从来没有使用过局部变量。
for循环
以下是我在bash中编写循环的方法。 此循环将从1打印到10。
for i in `seq 1 10` # you can use {1..10} instead of `seq 1 10`
do
echo "$i"
done
如果你想用一行代码写这个循环,可以这样写:
for i in `seq 1 10`; do echo $i; done
我觉得这是不可能记住的(你要怎么记住在 seq 1 10 之后有一个分号,但是在 do 之后却没有了),所以我不会去记它。
你也可以写while循环,但我从来没有这样写过。
有个很酷的事情是你可以遍历另一个命令的输出。seq 1 10 将数字从1到10(每行一个)打印,这个for循环只是提取该输出并遍历它。我就经常用这种方法。
您也可以使用反引号或$()来插入命令的输出。