如下内容转载自http://183530300.blog.51cto.com/894387/1841659
centos
相信正在脚本之路上狂奔的同窗们,都能感受到脚本中须要应用变量的地方很是普遍,简单来看变量也只不过就是:var=value;若是咱们深刻其 中,也能发现变量里面的学问其实也挺深的,今天就给你们分享一下这个小小的变量里面到底有多少的学问吧。Shell变量通常是无类型的,可是bash Shell提供了declare和typeset两个命令用于指定变量的类型,两个命令是彻底等价的。数组
1、高级变量用法——定义有类型变量
declare [选项] 变量名
-r 将变量设置为只读属性 等同于使用export VAR_NAME
-i 将变量定义为整型数
-a 将变量定义为数组
-f 显示此脚本前定义过的全部函数名及其内容
-F 仅显示此脚本前定义过的全部函数名
-x 将变量声明为环境变量
-l 将变量值转为小写字母
-u 将变量值转为大写字母bash
2、字符串切片:
一、${#var}:返回字符串变量var的长度
示例代码:
[root@centos7 array]# vara=test12345
[root@centos7 array]# echo ${vara}
test12345
[root@centos7 array]# echo ${#vara}
9ide
二、${var:offset}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到 ${#var}-1 之间
(bash4.2后,充许为负值)
示例代码:
[root@centos7 array]# vara=test12345
[root@centos7 array]# echo ${vara:4}
12345函数
三、${var:offset:number}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
示例代码:
[root@centos7 array]# vara=test12345
[root@centos7 array]# echo ${vara:3:4}
t123url
四、${var: -lengh}:取字符串的最右侧几个字符
注意:冒号后必须有一空白字符
示例代码:
[root@centos7 array]# vara=test12345
[root@centos7 array]# echo ${vara: -3}
345
[root@centos7 array]# echo ${vara: -5}
12345centos7
3、字符串处理
(一)基于模式取子串:
一、${var#*word}:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符之间的全部字符
示例代码:
[root@centos7 array]# vara=test12345
[root@centos7 array]# echo ${vara#*12}
345
[root@centos7 array]# echo ${vara#*es}
t12345spa
二、${var##*word}:同上,不一样的是,删除的是字符串开头至最后一次由word指定的字符之间的全部内容
示例代码:
[root@centos7 array]# file=/var/log/messages
[root@centos7 array]# echo ${file##*/}
messages命令行
三、${var%word*}:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符之间的全部字符
示例代码:
[root@centos7 array]# file=/var/log/messages
[root@centos7 array]# echo ${file%/*}
/var/logblog
四、${var%%word*}:同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的全部字符
示例代码:
[root@centos7 array]# url=http://www.baidu.com:80
[root@centos7 array]# echo ${url##*:}
80
[root@centos7 array]# echo ${url%%:*}
http
(二)查找替换:
一、${var/pattern/substi}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substi替换之
示例代码:
[root@centos7 array]# vara=test12345test
[root@centos7 array]# echo ${vara/es/00}
t00t12345test
二、${var//pattern/substi}: 查找var所表示的字符串中,全部能被pattern所匹配到的字符串,以substi替换之
示例代码:
[root@centos7 array]# vara=test12345test
[root@centos7 array]# echo ${vara/es/00}
t00t12345test
[root@centos7 array]# echo ${vara//es/00}
t00t12345t00t
三、${var/#pattern/substi}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substi替换之
示例代码:
[root@centos7 array]# vara=test12345test
[root@centos7 array]# echo ${vara/#te/00}
00st12345test
四、${var/%pattern/substi}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substi替换之
示例代码:
[root@centos7 array]# vara=test12345test
[root@centos7 array]# echo ${vara/#te/00}
00st12345test
[root@centos7 array]# echo ${vara/%st/000}
test12345te000
(三)查找并删除:
一、${var/pattern}:查找var所表示的字符串中,删除第一次被pattern所匹配到的字符串
示例代码:
[root@centos7 array]# vara=test12345test
[root@centos7 array]# echo ${vara/12345}
testtest
二、${var//pattern}:查找var所表示的字符串中,删除全部被pattern所匹配到的字符串
示例代码:
[root@centos7 array]# vara=test12345test
[root@centos7 array]# echo ${vara//t}
es12345es
[root@centos7 array]# file=/var/log/messages
[root@centos7 array]# echo ${file///}
varlogmessages
三、${var/#pattern}:查找var所表示的字符串中,删除行首被pattern所匹配到的字符串
示例代码:
[root@centos7 array]# vara=test12345test
[root@centos7 array]# echo ${vara/#test}
12345test
[root@centos7 array]# file=/var/log/messages
[root@centos7 array]# echo ${file/#\/var}
/log/messages
四、${var/%pattern}:查找var所表示的字符串中,删除行尾被pattern所匹配到的字符串
示例代码:
[root@centos7 array]# file=/var/log/messages
[root@centos7 array]# echo ${file/%ges}
/var/log/messa
[root@centos7 array]# vara=test12345test
[root@centos7 array]# echo ${vara/%test}
test12345
(四)字符大小写转换:
一、${var^^}:把var中的全部小写字母转换为大写
示例代码:
[root@centos7 array]# vara=test
[root@centos7 array]# echo ${vara^^}
TEST
二、${var,,}:把var中的全部大写字母转换为小写
示例代码:
[root@centos7 array]# vara=WANGJUN
[root@centos7 array]# echo ${vara,,}
wangjun
4、变量赋值高级方式
一、${var:-value}:若是var为空或未设置,那么返回value;不然,则返回var的值
示例代码:
[root@centos7 array]# echo ${varb:-100}
100
二、${var:+value}:若是var不空,则返回value
示例代码:
[root@centos7 array]# varb=wangjun
[root@centos7 array]# echo ${varb:+100}
100
三、${var:=value}:若是var为空或未设置,那么返回value,并将value赋值给var;不然,则返回var的值
示例代码:
[root@centos7 array]# varb=wangjun
[root@centos7 array]# echo ${varb:=100}
wangjun
[root@centos7 array]# echo ${varc:=100}
100
四、${var:?error_info}:若是var为空或未设置,那么返回error_info;不然,则返回var的值
示例代码:
[root@centos7 array]# varb=wangjun
[root@centos7 array]# echo ${varb:?4}
wangjun
[root@centos7 array]# echo ${vard:?4}
-bash: vard: 4
使用配置文件为脚本程序变量赋值
(1) 定义文本文件,每行定义“name=value”
(2) 在脚本中source此文件便可
5、间接变量引用
若是第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量引用
var1=var2
var2=value
var1的值是var2,而var2又是变量名,var2的值为value,间接变量引用是指经过var1得到变量值value的行为
bash Shell提供了两种格式实现间接变量引用
eval var3=\$$var1
var3=${!var1}
示例代码:
[root@centos7 useradmin]# var1=user
[root@centos7 useradmin]# user=test
[root@centos7 useradmin]# echo $var1
user
[root@centos7 useradmin]# eval var3=\$$var1
[root@centos7 useradmin]# echo $var3
test
[root@centos7 useradmin]# var4=${!var1}
[root@centos7 useradmin]# echo $var4
test
eval命令
eval命令将会首先扫描命令行进行全部的置换,而后再执行该命令。该命令适用于那些一次扫描没法实现其功能的变量。该命令对变量进行两次扫描
示例代码: [root@centos7 useradmin]# prefix=user [root@centos7 useradmin]# $num bash: 005: command not found... [root@centos7 useradmin]# num=005 [root@centos7 useradmin]# eval "echo $prefix{001..$num}" user001 user002 user003 user004 user005