base脚本文件的第一行

#! /bin/bash

解析

1. brace expansion 花括号扩展

echo {1..10}
mkdir data{1,2,3,4}
mkdir data-{a..d}

使用上面方法可以快速创建 data-a 到 data-d 的文件,”..” 可以展开

2. tilde expansion 波浪线扩展

“~” 可扩展成用户的 $HOME 值

cd ~

3. parameter, variable 变量扩展

将带”$”的变量名扩展成变量值

var="xyz"
echo $var

4. artithmetic expansion 算术扩展

 整数算术运算

$(( i++ ))
sum=$(( i++ ))

5. command substitution 命令替换

将命令的输出赋值给一个变量

today=$(date +%F)
line=$(grep xxx yyy)

6. word splitting 词的拆分

变量值按空白符拆分,如

var=" a b c"
for v in var; do
    echo $v
done

7. pathname expansion 路径名扩展

通配符扩展成文件名

“*” 表示任意长度的字符串

“?” 表示任意一个字符

“[]” [1-9] 也可以实现快速扩展,但是只能用于文件名扩展,跟上面的花括号有所区别

注意

1. 脚本中的解析是按照上面1到7的顺序进行的

2. 不要随便写空格,因为空格会导致无法正确解析,例如:”=”号两边不允许有空格

3. 所有 “/” 结尾的都代表是一个文件夹

4. 注意脚本的权限位和文件掩码,如果在脚本中动态生成一个文件,需要注意是否有权限执行

5. 避免使用 pwd 获取当前脚本的执行目录,因为 pwd 代表的是当前的工作目录,并不是脚本的。可以使用以下方法,不管在哪里执行脚本,都能正确获取脚本的路径信息

get_workdir()
{
    local dir=$(dirname $0)
    pwd=$( cd "$dir" && pwd) 
    echo $pwd
    pwd     
}

workdir=$(get_workdir)
echo "workdir: $workdir"