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

相信正在脚本之路上狂奔的同学们,都能感觉到脚本中需要应用变量的地方非常广泛,简单来看变量也只不过就是:var=value;如果我们深入其中,也能发现变量里面的学问其实也挺深的,今天就给大家分享一下这个小小的变量里面到底有多少的学问吧。Shell变量一般是无类型的,但是bash Shell提供了declare和typeset两个命令用于指定变量的类型,两个命令是完全等价的。

一、高级变量用法——定义有类型变量
declare [选项] 变量名
 -r 将变量设置为只读属性  等同于使用export VAR_NAME
 -i 将变量定义为整型数
 -a 将变量定义为数组
 -f 显示此脚本前定义过的所有函数名及其内容
 -F 仅显示此脚本前定义过的所有函数名
 -x 将变量声明为环境变量
 -l  将变量值转为小写字母
 -u  将变量值转为大写字母

二、字符串切片:
 1、${#var}:返回字符串变量var的长度
  示例代码:
  [[email protected] array]# vara=test12345
  [[email protected] array]# echo ${vara}
  test12345
  [[email protected] array]# echo ${#vara}
  9

2、${var:offset}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值在0 到 ${#var}-1 之间
      (bash4.2后,充许为负值)
  示例代码:
  [[email protected] array]# vara=test12345
  [[email protected] array]# echo ${vara:4}
  12345

3、${var:offset:number}:返回字符串变量var中从第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
  示例代码:
  [[email protected] array]# vara=test12345
  [[email protected] array]# echo ${vara:3:4}
  t123

4、${var: -lengh}:取字符串的最右侧几个字符
     注意:冒号后必须有一空白字符
  示例代码:
  [[email protected] array]# vara=test12345
  [[email protected] array]# echo ${vara: -3}
  345
  [[email protected] array]# echo ${vara: -5}
  12345

三、字符串处理
(一)基于模式取子串:
 1、${var#*word}:自左而右,查找var变量所存储的字符串中,第一次出现的word, 删除字符串开头至第一次出现word字符之间的所有字符
  示例代码:
  [[email protected] array]# vara=test12345
  [[email protected] array]# echo ${vara#*12}
  345
  [[email protected] array]# echo ${vara#*es}
  t12345

2、${var##*word}:同上,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容
  示例代码:
  [[email protected] array]# file=/var/log/messages
  [[email protected] array]# echo ${file##*/}
  messages

3、${var%word*}:自右而左,查找var变量所存储的字符串中,第一次出现的word, 删除字符串最后一个字符向左至第一次出现word字符之间的所有字符
  示例代码:
  [[email protected] array]# file=/var/log/messages
  [[email protected] array]# echo ${file%/*}
  /var/log

4、${var%%word*}:同上,只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符
  示例代码:
  [[email protected] array]# url=http://www.baidu.com:80
  [[email protected] array]# echo ${url##*:}
  80
  [[email protected] array]# echo ${url%%:*}
  http

(二)查找替换:
 1、${var/pattern/substi}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substi替换之
  示例代码:
  [[email protected] array]# vara=test12345test
  [[email protected] array]# echo ${vara/es/00}
  t00t12345test

2、${var//pattern/substi}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substi替换之
  示例代码:
  [[email protected] array]# vara=test12345test
  [[email protected] array]# echo ${vara/es/00}
  t00t12345test
  [[email protected] array]# echo ${vara//es/00}
  t00t12345t00t

3、${var/#pattern/substi}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substi替换之
  示例代码:
  [[email protected] array]# vara=test12345test
  [[email protected] array]# echo ${vara/#te/00}
  00st12345test

4、${var/%pattern/substi}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substi替换之
  示例代码:
  [[email protected] array]# vara=test12345test
  [[email protected] array]# echo ${vara/#te/00}
  00st12345test
  [[email protected] array]# echo ${vara/%st/000}
  test12345te000

(三)查找并删除:
 1、${var/pattern}:查找var所表示的字符串中,删除第一次被pattern所匹配到的字符串
  示例代码:
  [[email protected] array]# vara=test12345test
  [[email protected] array]# echo ${vara/12345}
  testtest

2、${var//pattern}:查找var所表示的字符串中,删除所有被pattern所匹配到的字符串
  示例代码:
  [[email protected] array]# vara=test12345test
  [[email protected] array]# echo ${vara//t}
  es12345es
  [[email protected] array]# file=/var/log/messages
  [[email protected] array]# echo ${file///}
  varlogmessages

3、${var/#pattern}:查找var所表示的字符串中,删除行首被pattern所匹配到的字符串
  示例代码:
  [[email protected] array]# vara=test12345test
  [[email protected] array]# echo ${vara/#test}
  12345test
  [[email protected] array]# file=/var/log/messages
  [[email protected] array]# echo ${file/#\/var}
  /log/messages
 
 4、${var/%pattern}:查找var所表示的字符串中,删除行尾被pattern所匹配到的字符串
  示例代码:
  [[email protected] array]# file=/var/log/messages
  [[email protected] array]# echo ${file/%ges}
  /var/log/messa
  [[email protected] array]# vara=test12345test
  [[email protected] array]# echo ${vara/%test}
  test12345

(四)字符大小写转换:
 1、${var^^}:把var中的所有小写字母转换为大写
  示例代码:
  [[email protected] array]# vara=test
  [[email protected] array]# echo ${vara^^}
  TEST

2、${var,,}:把var中的所有大写字母转换为小写
  示例代码:
  [[email protected] array]# vara=WANGJUN
  [[email protected] array]# echo ${vara,,}
  wangjun

四、变量赋值高级方式
 1、${var:-value}:如果var为空或未设置,那么返回value;否则,则返回var的值
  示例代码:
  [[email protected] array]# echo ${varb:-100}
  100

2、${var:+value}:如果var不空,则返回value
  示例代码:
  [[email protected] array]# varb=wangjun
  [[email protected] array]# echo ${varb:+100}
  100

3、${var:=value}:如果var为空或未设置,那么返回value,并将value赋值给var;否则,则返回var的值
  示例代码:
  [[email protected] array]# varb=wangjun
  [[email protected] array]# echo ${varb:=100}
  wangjun
  [[email protected] array]# echo ${varc:=100}
  100

4、${var:?error_info}:如果var为空或未设置,那么返回error_info;否则,则返回var的值
  示例代码:
  [[email protected] array]# varb=wangjun
  [[email protected] array]# echo ${varb:?4}
  wangjun
  [[email protected] array]# echo ${vard:?4}
  -bash: vard: 4

使用配置文件为脚本程序变量赋值
  (1) 定义文本文件,每行定义“name=value”
  (2) 在脚本中source此文件即可

五、间接变量引用
 如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量引用
 var1=var2
 var2=value
 var1的值是var2,而var2又是变量名,var2的值为value,间接变量引用是指通过var1获得变量值value的行为

bash Shell提供了两种格式实现间接变量引用
 eval var3=\$$var1
 var3=${!var1}

  示例代码:

[[email protected] useradmin]# var1=user
 [[email protected] useradmin]# user=test
 [[email protected] useradmin]# echo $var1
 user
 [[email protected] useradmin]# eval var3=\$$var1
 [[email protected] useradmin]# echo $var3
 test

[[email protected] useradmin]# var4=${!var1}
 [[email protected] useradmin]# echo $var4
 test

eval命令
 eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描
  示例代码:
 [[email protected] useradmin]# prefix=user
 [[email protected] useradmin]# $num
 bash: 005: command not found...
 [[email protected] useradmin]# num=005
 [[email protected] useradmin]# eval "echo $prefix{001..$num}"
 user001 user002 user003 user004 user005

正在学习脚本的同学们,当你看到这儿的同时,有什么想法吗,相信曾经的困惑被打开了吧,至少当初我自己学到这儿的时候,豁然开朗。

时间: 2024-10-09 11:00:25

Shell脚本编程——字符串变量处理的相关文章

shell脚本编程之变量简介及脚本执行过程

脚本变量简介 变量类型:字符型.数值型.真.假:事先确定数据的存放格式和长度: 变量存放在内存空间: 编译型语言,没有额外的处理逻辑,属于强类型语言: 脚本型语言,可以有解释器控制:所以,可以是弱类型语言: 强类型:变量在使用前,必须事先声明,甚至还需要初始化(给一个初始值,如果没给一个原始值,里面是随机数): 弱类型:变量用时声明,甚至不需要区分类型(默认为字符串): 变量赋值:VAR-NAME=VALUE: bash shell变量类型: 环境变量 本地变量(局部变量),局部变量不一定都是本

Linux Shell脚本编程--字符串截取

Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} 其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符即删除 http://结果是 :www.aaa.com/123.htm 2. ## 号截取,删除左边字符,保留右边字符. echo ${var##*/} ##*/ 表示从左边开始删除最后(最右边)一个

shell脚本编程之变量的小用法

变量赋值 ${parameter:-word}:如果parameter为空或未定义,则变量展开为"word":否则,展开为parameter的值: ${parameter:+word}:如果parameter为空或未定义,不做任何操作:否则,展开为"word"值: ${parameter:=word}:如果parameter为空或未定义,则变量展开为"word",并将展开后的值赋值给parameter: ${parameter:?word}:如果

Shell脚本编程小结

1.  描述shell程序的运行原理: Shell是一种具备特殊功能的程序,它提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令,并把它送入内核去执行.内核是Linux系统的心脏,从开机自检时就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存.Shell是一种应用程序,当用户登录Linux系统时,Shell就会被调入内存执行.Shell独立于内核,它是连接内核和应用程序的桥梁,并由输入设备读取命令,再将其转为计算机可以理解的机械码,

Linux中的shell脚本编程——数组 ,高级字符串操作 ,高级变量 ,配置用户环境

概述: 概述: 本章节将讲述Linux中shell脚本编程的数组,高级字符串处理,高级变量和配置用户的环境. 一.函数和位置参数扩展 1.shift 命令实现在位置参数中的跳跃,会把最左边的参数挤掉     2.匿名函数的使用 第一篇:数组 一.数组的定义: 1.变量:存储单个元素的内存空间 2.数组:存储多个元素的连续的内存空间,相当于多个变量的集合. 3.数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

学习Shell脚本编程(第4期)_在Shell程序中的使用变量

变量的赋值 变量的访问 变量的输入 4.1 变量的赋值     在Shell编程中,所有的变量名都由字符串组成,并且不需要对变量进行声明.要赋值给一个变量,其格式如下: 变量名=值  注意: 等号(=)前后没有空格 例如: x=6 a="How are you " 表示把6赋值给变量x,字符串"How are you "赋值给变量a. 4.2 访问变量值 如果要访问变量值,可以在变量前面加一个美元符号"$",例如: [[email protect

Shell脚本编程规范与变量

主要内容 Shell脚本编程规范 Shell脚本应用场景 Shell编程规范 管道与重定向 Shell脚本变量 自定义变量 特殊变量 Shell脚本概述 Shell脚本的概念 将要执行的命令按顺序保存到一个文本文件 给该文件可执行权限,便可运行 可结合各种Shell控制语句以完成更复杂的操作 Shell脚本应用场景 重复性操作 批量事务处理 自动化运维 服务运行状态监控 定时任务执行 编写第一个Shell脚本 1.编写脚本代码 使用vim文本编辑器,每行一条Linux命令, 按执行顺序依次编写:

Shell脚本编程知识点总结及范例

 一:关于语言 1)编译性语言 编译型语言多半运作于底层,所处理的是字节.整数.浮点数或其它及其机器层经的对象.处理过程为:源程序--预处理--编译--汇编--链接,编译性语言为静态语言. 2)解释性语言 解释性语言读入程序代码并将其转化为内部的形式加以执行.处理过程:解释性(文本文件)-解释器去读取并执行.解释性语言为动态语言. 二:基础 变量类型 linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高级编程语言中变量的使用)bash变量类型分为本地变量和环境变量. 本地变量