shell中,变量的命名:可以有字母、数字和下划线组成,并且只能以字母和下划线开头。
shell语言的系统变量主要在对参数判断和命令返回值判断是使用。其中,包括脚本和函数的参数、脚本和函数的返回值。
变量 | 说明 |
$n | 脚本或函数的第n个参数 |
$0 | 当前shell的脚本名称 |
$# | 命令行参数的个数 |
$? | 前一个命令或函数的返回状态码 |
$$ | 返回本程序的进程ID(PID) |
$* | 以空格分割,返回所有参数。返回的形式为一个字符串:”参数1 参数2 参数3 。。。“ |
$@ | 以空格分割,返回所有参数。返回的形式为多个字符串:"参数1" "参数2" "参数3" 。。。 |
shell中的引号:双引号(" "),单引号(' '),反引号(` `)
引用:shell中,字符串用引用符号将字符串包括起来,以防止其中的特殊字符串被shell解释为其他含义。
引用符号 | 说明 |
单引号 | 所有的字符都将保留字面意义 输出变量的内容时但因号是什么就输出什么。 (强引用) |
双引号 | 除了美元字符($),单引号('),反引号(`),反斜杠(\) 之外, 其他所有的字符都将保留字面意义 ;(弱引用) |
反引号 | 反引号中的字符串经被解析为shell的命令 |
反斜杠 | 转义字符,屏蔽后面字符的特殊意义 |
用单引号括起来(' ') 用双引号括起来(" ")
示例(1):
[root@huawei shell]# a=123
[root@huawei shell]# b='456'
[root@huawei shell]# c="789"
[root@huawei shell]# echo "$b"
456
[root@huawei shell]# echo "${c}"
789
[root@huawei shell]# echo "$a"
123
示例(2):
[root@huawei shell]# a=allen--$a
[root@huawei shell]# b='allen--$a'
[root@huawei shell]# c="allen--$a"
[root@huawei shell]# echo "a=$a" //直接定义变量的内容
a=allen--123
[root@huawei shell]# echo "b=$b" //输出变量的内容时但因号是什么就输出什么。
b=allen--$a
[root@huawei shell]# echo "c=${c}" //括号的变量即命令会经过解析后在输出内容
c=allen--allen--123
示例(3): awk 在shell的特殊用法:
[root@huawei shell]# ETF=123455 注意:没有添加引号
[root@huawei shell]# echo "$ETF"
123455
[root@huawei shell]# awk 'BEGIN {print "$ETF"} '
$ETF
[root@huawei shell]# awk 'BEGIN {print $ETF} ' 输出为空
[root@huawei shell]# awk 'BEGIN {print '$ETF'} ' 使用但引号
123455
[root@huawei shell]# awk 'BEGIN {print "'$ETF'"} ' 使用但引号和双引号
123455
[root@huawei shell]# ETT='old_allen' //添加单因号
[root@huawei shell]# awk 'BEGIN {print "ETT"}'
ETT
[root@huawei shell]# awk 'BEGIN {print "$ETT"}'
$ETT
[root@huawei shell]# awk 'BEGIN {print $ETT}'
[root@huawei shell]# awk 'BEGIN {print '$ETT'}'
[root@huawei shell]# awk 'BEGIN {print "'$ETT'"}'
old_allen
[root@huawei shell]# ETT="new_allen" //添加双因号
[root@huawei shell]# awk 'BEGIN {print "$ETT"}'
$ETT
[root@huawei shell]# awk 'BEGIN {print $ETT}'
[root@huawei shell]# awk 'BEGIN {print '$ETT'}'
[root@huawei shell]# awk 'BEGIN {print "'$ETT'"}'
new_allen
[root@huawei shell]# ETT=`pwd` //反引号
[root@huawei shell]# echo $ETT
/home/allen/test/shell
[root@huawei shell]# awk 'BEGIN {print "$ETT" }'
$ETT
[root@huawei shell]# awk 'BEGIN {print $ETT }'
[root@huawei shell]# awk 'BEGIN {print '$ETT' }' //错误提示
awk: cmd. line:1: fatal: division by zero attempted
[root@huawei shell]# awk 'BEGIN {print "'$ETT'" }'
/home/allen/test/shell
[root@huawei shell]# ETT="new_allen" //添加双因号
[root@huawei shell]# echo "$ETT" |awk '{print $0}'
new_allen
[root@huawei shell]#
[root@huawei shell]# echo '$ETT' |awk '{print $0}'
$ETT
[root@huawei shell]# echo $ETT |awk '{print $0}'
new_allen
[root@huawei shell]# echo "'$ETT'" |awk '{print $0}'
'new_allen'
[root@huawei shell]# ETT=`pwd` //反引号
[root@huawei shell]# echo $ETT
[root@huawei shell]# echo "$ETT" | awk '{print $0}'
/home/allen/test/shell
[root@huawei shell]# echo $ETT | awk '{print $0}'
/home/allen/test/shell
[root@huawei shell]# echo '$ETT' | awk '{print $0}'
$ETT
用反引号括起来(` `)
命令替换,还有另外一种方式:$()的形式。
例如:
1、`pwd`
2、$(pwd)t
其中,1和2是完全等价的。
touch $(date +%F).txt touch `date +%F`.c
2017-09-20.c 2017-09-20.txt
mkdir Y_$(date +%F)_date mkdir Y_`date +%F`_date2pe
反斜杠(\)
declare attribute variable
attribute的可选值:
-p:显示所有的变量
-i:声明变量为整型
-r:声明变量为只读。只读变量不可以:修改和删除。
-a:声明变量为数组
-f:显示所有自定义函数
-x:将变量设置为环境变量