使用env命令可列出全部系统变量。不过登录的用户不一样这些环境变量的值也不一样。
# env
定义变量(有无双引号""都可)
注意事项:
1、定义变量时,变量名不加美元符号($,PHP语言中变量需要)
2、变量名和等号之间不能有空格
3、变量名的命名须遵循如下规则:
- 首个字符必须为字母(a-z,A-Z)。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
使用变量(有无花括号{}都可)
使用一个定义过的变量,只要在变量名前面加美元符号即可
一次定义多个变量并使用变量
#不加单引号
[root@test ~]# a=(1 2 3 4 5 6 7 8 9 10 11 12) [root@test ~]# echo $a 1 [root@test ~]# echo ${a} 1 [root@test ~]# echo ${a[@]} 1 2 3 4 5 6 7 8 9 10 11 12 [root@test ~]# echo ${a[*]} 1 2 3 4 5 6 7 8 9 10 11 12 [root@test ~]# echo $a[*] 1[*] [root@test ~]# echo $a[@] 1[@]
#加单引号
[root@test ~]# b=('apple' 'banana' 'orange' 'pear' 'grape')
[root@test ~]# echo $b
apple
[root@test ~]# echo ${b}
apple
[root@test ~]# echo ${b[@]}
apple banana orange pear grape
[root@test ~]# echo ${b[*]}
apple banana orange pear grape
[root@test ~]# echo $b[@]
apple[@]
[root@test ~]# echo $b[*]
apple[*]
提取子字符串
从第几个字符串,截取几个字符
查找子字符串
# echo `expr index "$string" du`
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
使用 unset 命令可以删除变量
特殊符号
{} 大括号:
用法一:通配符扩展
# mkdir {userA,userB,userC}-{home,bin,data}
用法二:可用于语句块的构造,语句之间用回车隔开。
用法三:参数扩展,在处理字符串和未知变量时,是很有用的。
${name:-default} |
使用一个默认值(一般是空值)来代替那些空的或者没有赋值的变量name |
${name:=default} |
使用指定值来代替空的或者没有赋值的变量name |
# name=${name:-jerry}
# echo "变量name未赋值时的默认值:$name:$name"
${param/pattern/string} |
将 param 中第一个匹配 pattern 的子串替换为 string |
# test_string='aaa bbb ccc ddd eee bbb'
# echo "$test_string 代换: ${test_string/bbb/B B B}"
${param//pattern/string} |
将 param 中所有匹配 pattern 的子串替换为 string |
# echo "$test_string 整体代换: ${test_string//bbb/B B B}"
${param:offset} |
提取 param 中从位置 offset 开始的子串(offset 从 0 开始)。如果 offset 为负数,表示从字符串结尾开始,此时 offset 必须被括号括起来,或者在 offset 之前加一个空格 |
# echo "提取test_string中从位置3开始的字符串: ${test_string:3}"
${#name} |
给出name的长度 |
# echo "test_string字符串长度: ${#test_string}"
# prefix_string=something-test.jpg
# echo "变量prefix_string的值: ${prefix_string}"
# echo "删除、替换变量Prefix_string的值: ${prefix_string#something-}"
# suffix_string=test.conf
# echo "删除、替换变量suffix_string的值: ${suffix_string%.conf}"
大小写替换:
${param^^pattern} |
pattern 为单个字符,将 param 中所有匹配 pattern 的字符转换为大写 |
# multi_case_string='abcdefgABCDEFGabcdefgABCDEFG'
# echo "小写改大写: ${multi_case_string^^}"
${param,,pattern} |
pattern 为单个字符,将 param 中所有匹配 pattern 的字符转换为小写 |
# echo "大写改小写: ${multi_case_string,,}"
只修改匹配的字符:
# echo "小写改大写: ${multi_case_string^^[abc]}"
# echo "大写改小写: ${multi_case_string,,[DEF]}"
[] 中括号:
用法一:允许匹配方括号中任何一个单个字符。
注意:在mkdir命令下无效。
用法二:用于条件判断符号。
[]符号可理解为指向test命令的一个软链接,所以其用法可完全参照test。
反引号
` command ` 反引号:`command`与$(command)的含义相同,返回当前执行命令的结果:
' string ' 单引号 和 “ string ” 双引号:
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
单、双引号的区别在于双引号转义特殊字符而单引号不转义特殊字符。
$((…))语法:对括号内的表达式求值
shell中几种特殊的参数变量的引用:
- $1、$2、$3……${10}、${11}、${12}……:表示脚本传入的的各个参数,注意当需表示两位数以后的参数时数字要用花括号括起。
- $@ 列出所有的参数,各参数用空格隔开
-
$* 列出所有的参数,各参数用环境变量IFS的第一个字符隔开
冒号
“:”( 冒号):内建空指令,返回值为0
井号
“#”( 井号):表示符号后面的是注解文字,不会被执行;
* 匹配文件名中的任何字符,包括字符串;
?匹配文件名中的任何单个字符;
~ 代表使用者的home目录。
倒斜线
“”(倒斜线):放在指令前,有取消aliases(别名)的作用;放在特殊符号前,则该特殊符号的作用消失;放在指令的最末端,表示指令连接下一行(使得回车符无效,只起换行作用)。
感叹号
“!”(感叹号):通常它代表反逻辑的作用,譬如条件侦测中,用“!=”来代表“不等于”。