# 变量
Shell 脚本语言与其他编程语言的一个重要区别是:变量赋值与等号之间不能有空格间隙。这样子设计是有原因的,因为 shell 不仅是编程语言,更重要的还是行解释器。如果使用 VAR = value
,它就可能被解释为运行一个名为 “VAR” 的命令,并带有两个参数 =
和 value
。因此这不可能成功运行。
Shell 脚本使用 $VAR
来引用已被定义过的变量。
变量的作用域
局部变量
当我们运行一个脚本文件时,Linux 会为该脚本创建一个新的进程,并为其分配唯一的 PID。我们只能在当前进程中使用在此文件中定义的变量。一旦进程结束或切换到另一个进程,就不能再使用这些变量。
全局变量
然而,就像 Windows 中的“环境变量”概念一样,Linux 也有全局作用域的变量,可以通过 source
命令或 .
命令来加载脚本文件。这就是为什么像 .bashrc
或 .vimrc
这样的配置文件能够生效(每次打开 bash 时会运行 source .bashrc
,每次打开 vim 时会运行 source .vimrc
)。
优先级
假设出现这样了一种情况,局部定义的变量与全局变量同名,那么此时局部变量将具有优先权。如果局部变量不存在或未定义,则使用全局变量。如果两者都不存在,则返回空值。
语句
if语句
1 | if [ 布尔表达式 ] |
case 语句
1 | case 变量 in |
循环语句
循环语句有多种写法
1 | for i in {1..10} |
特殊符号
$$$$ 表示运行脚本的进程号(PID)
使用花括号 {}
包裹变量,即使变量后紧跟字符也可以,无需空格。例如:
1 | #!/bin/sh |
还有一个优点是,如果我们输入两个分隔的单词,花括号可以防止 touch
创建两个新文件。
注释
Shell 使用 #
来注释整行内容。
运行脚本
将脚本写入可读且可执行的文件中。第一行可以指示来运行它的程序(如 /bin/sh
)。如果你使用的是 GNU/Linux,/bin/sh
通常是一个指向 Bash 的符号链接。
1 | #!/bin/sh |
函数
内置命令
echo
: 接受一个或多个由空白字符(空格或制表符)分隔的参数。
expr
: 将表达式的值打印到标准输出。它支持逻辑表达式。它还可以作为 Shell 中的简单整数计算器。但请注意,星号 *
被视为通配符。因此,当你进行乘法运算时,应该使用 \*
。
read
: 从标准输入读取一行并存储到提供的变量中。
touch
: 通过名称创建一个空文件。
test
: 可以用来检测某些文件或者是相关的属性,和判断符号 [] 等价test -n 字符串
: 字符串长度不为零则为真
查看学习更多的Linux命令使用,跳转这篇文章。
评论
shortname
for Disqus. Please set it in_config.yml
.