shell 之变量
内部变量之位置参数
变量 | 描述 |
---|---|
$0 | 脚本文件本身的名字 |
$1,$2,…,$n | n号命令行参数 |
$# | 命令行参数的个数 |
“$*” | 等同于”$1 $2 $3…” |
“$@” | 等同于”$1”,”$2”,”$3”,… |
内部的shift命令: 位置参数的移位操作,$#的值减一,旧的$2变为$1,…,也可以shift n
自定义变量
存储的内容:字符串,执行的过程中可以被修改。
变量名: 字母开头,其余字符可以是数字,字母,下划线
创建变量: name=1.12 等号两侧不能有空格
引用变量: $name 或者 ${name}
当变量未定义时,变量值为空
shell内部一些开关 | 描述 |
---|---|
set -u | 当引用一个未定义的变量时,产生一个错误 |
set +u | 当引用一个未定义的变量时,认为是一个空串 |
set -x | 执行命令时,打印执行的命令及参数,前面冠以+号 |
set +x | 取消上述设置 |
环境变量和局部变量
创建的变量,默认为局部变量
局部变量$\rightarrow$环境变量,使用export语句 export proto
局部变量: shell启动的子进程继承环境变量,不继承局部变量
子进程对环境变量的修改,不影响父进程的同名变量
几个环境变量
- HOME: 用户主目录的路径名
- PATH: 命令查找路径
- TERM: 终端类型
另外: set命令列出当前所有变量及其值以及函数的定义, env累出环境变量及其值。
元字符
元字符 | 描述 | |
---|---|---|
空格,制表符 | 命令行参数的分隔符 | |
回车 | 执行键入的命令 | |
>,<, | 重定向与管道 | |
; | 用于一行内输入多个命令(;;) | |
& | 后台运行(&&) | |
$ | 应用shell变量 | |
` | 反向单引号,用于命令替换 | |
* [] ? | 文件通配符 | |
\ | 去向后继字符的特殊作用,转义 | |
() | 用于定义shell函数或在子shell中执行一组命令 |
注: ()><|;&除本身意义外还可以起到分隔符的作用
转义
双引号 “”
- 除$和`外特殊字符的特殊含义被取消,即仍可以使用命令替换和变量替换
- 需要的转义: \”, \$, `, \
单引号
对所括起的任何字符,不作任何特殊解释
转义符代表斜杠本身,不许中间插入单引号
反撇号
- \ 代表反斜线吱声
- `代表反撇号本身
转义符后跟非特殊字符
引号内,系统处理时尽量维持字面含义
引号外,属于未定义的情况,最好不跟非特殊字符
shell 替换
命令替换 name=
cmd
或者name = $(cmd) , 代表着name=执行cmd的标准输出,变量替换 $name ${name}
文件名替换 ls *.c
辅助的命令
命令 | 描述 |
---|---|
read name | 从标准输入读入一行内容赋值给变量 |
echo arg1 arg2 arg3 | 打印命令行参数,没两个间用1空格分开,最后打印换行符 |
echo -e arg1 arg2 arg3 | 除上面功能外,会打印转义符 |
printf ‘\033[01;33mConnect to %s Network\n’ $proto | 打印 |
注:
echo转义 | 描述 |
---|---|
\c | 打印完毕,不换行 |
\b | 退格 |
\n | 换行 |
\r | 回车 |
\t | 水平制表 |
\ | 反斜线 |
\nnn | 八进制描述的字符ASCII码 |