Shell脚本编程——字符串变量处理

如下内容转载自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

相关文章
相关标签/搜索