shell变量

使用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 ” 双引号:

单引号字符串的限制:

  1. 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  2. 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

单、双引号的区别在于双引号转义特殊字符而单引号不转义特殊字符。

$((…))语法:对括号内的表达式求值

shell中几种特殊的参数变量的引用:

  • $1、$2、$3……${10}、${11}、${12}……:表示脚本传入的的各个参数,注意当需表示两位数以后的参数时数字要用花括号括起。
  • $@ 列出所有的参数,各参数用空格隔开
  • $*  列出所有的参数,各参数用环境变量IFS的第一个字符隔开

冒号

“:”( 冒号):内建空指令,返回值为0

井号

 “#”( 井号):表示符号后面的是注解文字,不会被执行;

* 匹配文件名中的任何字符,包括字符串;

 ?匹配文件名中的任何单个字符;

 ~ 代表使用者的home目录。

 倒斜线

“”(倒斜线):放在指令前,有取消aliases(别名)的作用;放在特殊符号前,则该特殊符号的作用消失;放在指令的最末端,表示指令连接下一行(使得回车符无效,只起换行作用)。

感叹号

“!”(感叹号):通常它代表反逻辑的作用,譬如条件侦测中,用“!=”来代表“不等于”。

原文地址:https://www.cnblogs.com/djlsunshine/p/9865038.html