[Linux Shell学习系列五]Shell编程基础-Shell变量进阶
时间:2020-05-18
本文章向大家介绍[Linux Shell学习系列五]Shell编程基础-Shell变量进阶,主要包括[Linux Shell学习系列五]Shell编程基础-Shell变量进阶使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. Bash中的参数扩展
参数是一个存储数值的实体,并由名称、数字或特定符号所引用:
被名称引用的参数称作变量;
被数字引用的参数称作位置参数;
被特定符号引用的参数具有特殊的含义和用途,被作为Bash的特殊内部变量引用。
参数扩展是从引用的实体取值的过程,就像扩展变量打印它的值。
1)基本的参数扩展
$PARAMETER ${PARAMETER} #当参数名后面紧接着其他字符,必须使用{} $ WORD=car $ echo $WORDs $ echo ${WORD}s cars #位置参数9以后的,也必须加{} $ echo "Arguments 10 is $1" $ echo "Arguments 10 is ${10}"
2)间接参数扩展
$ PARAMETER=TEMP $ TEMP="It's indirect" $ echo ${PARAMETER} #PARAMETER的值 TEMP $ echo ${!PARAMETER} #扩展为参数TEMP的值 It's indirect
3)大小写修改(Bash 4.0的新特性)
$ PARAMETER=tEmp $ echo ${PARAMETER^} #首字母大写 TEmp $ echo ${PARAMETER^^} #所有字母大写 TEMP $ echo ${PARAMETER,} #首字母小写 tEmp $ echo ${PARAMETER,,} #所有字母小写 temp $ echo ${PARAMETER~} #首字母大小写转换 TEmp $ echo ${PARAMETER~~} #所有字母大小写转换 TeMP
3)变量名扩展
${!PREFIX*} #输出以字符串PREFIX开头的所有变量名,默认以空格隔开 ${!PREFIX@} #示例 $ echo ${!BASH*} BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION $ echo ${!BASH@} BASH BASHOPTS BASHPID BASH_ALIASES BASH_ARGC BASH_ARGV BASH_CMDS BASH_COMMAND BASH_LINENO BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO BASH_VERSION
4)字符串移除
${PARAMETER#PATTERN} #移除参数值字符中开头匹配模式的最短文本 ${PARAMETER##PATTERN} #移除参数值字符中开头匹配模式的最长文本 ${PARAMETER%PATTERN} #移除参数值字符中末尾匹配模式的最短文本 ${PARAMETER%%PATTERN} #移除参数值字符中末尾匹配模式的最长文本 #示例: $ MYSTRING="This is used for removing string" $ echo ${MYSTRING} This is used for removing string $ echo ${MYSTRING#* } is used for removing string $ echo ${MYSTRING##* } string $ echo ${MYSTRING% *} This is used for removing $ echo ${MYSTRING%% *} This #常用场景:提取文件名的一部分 $ FILENAME=echotime.sh $ echo ${FILENAME} echotime.sh $ echo ${FILENAME##*.} #提取后缀 sh $ echo ${FILENAME%.*} #移除后缀 echotime $ echo ${FILENAME} /home/user/echotime.sh $ echo ${FILENAME##*/} #提取文件名 echotime.sh $ echo ${FILENAME%/*} #提取目录名 /home/user
5)字符串搜索与替换
${PARAMETER/PATTEN/STRING} #替换一个匹配指定模式的子字符串 ${PARAMETER//PATTEN/STRING} #替换所有匹配指定模式的子字符串 ${PARAMETER/PATTEN} #不指定替换的字符串,则为删除一个匹配指定模式的子字符串 ${PARAMETER//PATTEN} #不指定替换的字符串,则为删除一个匹配指定模式的子字符串 $ MYSTRING="This is used for replacing string or removing string" $ echo ${MYSTRING} This is used for replacing string or removing string $ echo ${MYSTRING/string/characters} #替换一个 This is used for replacing characters or removing string $ echo ${MYSTRING//string/characters} #替换所有 This is used for replacing characters or removing characters $ echo ${MYSTRING/string} #删除一个 This is used for replacing or removing string $ echo ${MYSTRING//string} #删除所有 This is used for replacing or removing
6)字符串长度
${#PARAMETER} #获取字符串的长度 $ MYSTRING="Hello World" $ echo ${#MYSTRING} 11
7)子字符串扩展
${PAREMETER:OFFSET} #从指定位置截取到参数值的末尾 ${PAREMETER:OFFSET:LENGTH} #从指定位置截取指定长度的字符串 $ MYSTRING="This is used for substring expansion" $ echo ${MYSTRING} This is used for substring expansion $ echo ${MYSTRING:8} #未指定长度 used for substring expansion $ echo ${MYSTRING:8:13} #指定长度 used for subs
8)使用默认值
${PAREMETER:-WORD} #如果PAREMETER是未定义或者null时,扩展WORD,否则扩展PAREMETER ${PAREMETER-WORD} #与上面不同:只有PAREMETER是未定义时,才使用WORD $ unset MYSTRING #未定义 $ echo ${MYSTRING} $ echo ${MYSTRING:-Hello World} #未定义 Hello World $ echo ${MYSTRING} $ MYSTRING="Hi" $ echo ${MYSTRING:-Hello World} #定义 Hi
9)指定默认值
${PAREMETER:=WORD} #如果PAREMETER是未定义或者null时,扩展WORD,并将WORD赋值给PAREMETER ${PAREMETER=WORD} #与上面不同:只有PAREMETER是未定义时,才使用WORD,并将WORD赋值给PAREMETER $ unset MYSTRING $ echo ${MYSTRING} $ echo ${MYSTRING:=Hello World} #未定义 Hello World $ echo ${MYSTRING} #赋值 Hello World $ MYSTRING="Hi" $ echo ${MYSTRING:=Hello World} #已定义 Hi $ echo ${MYSTRING} #不赋值 Hi
10)使用替代值
${PAREMETER:+WORD} #如果PAREMETER是未定义或者null时,不扩展任何内容;如果PAREMETER是已定义且不为空,则扩展WORD,而不是PARAMETER的值 ${PAREMETER+WORD} #与上面不同:#如果PAREMETER是未定义时,不扩展任何内容;如果PAREMETER是已定义,则扩展WORD $ unset MYSTRING $ echo ${MYSTRING} $ echo ${MYSTRING:+NOTE: MYSTRINT seems to be set} #未定义,不扩展任何内容 $ MYSTRING="Hi" $ echo ${MYSTRING} Hi $ echo ${MYSTRING:+NOTE: MYSTRINT seems to be set} #已定义,扩展WORD而不是PARAMETER NOTE: MYSTRINT seems to be set
11)显示错误信息
${PAREMETER:?WORD} #如果PAREMETER是未定义或者null时,返回一个错误,以WORD为错误信息,否则扩展PARAMETER的值 ${PAREMETER?WORD} #与上面不同:如果PAREMETER是未定义时,返回一个错误,以WORD为错误信息,否则扩展PAREMETER,为空则返回空 $ unset MYSTRING $ echo ${MYSTRING} $ echo ${MYSTRING:?Error: MYSTRINT is not set} -bash: MYSTRING: Error: MYSTRINT is not set $ MYSTRING="Hi" $ echo ${MYSTRING:?Error: MYSTRINT is not set} Hi
本节结束
原文地址:https://www.cnblogs.com/workingdiary/p/12909106.html
- zookeeper学习系列:三、利用zookeeper做选举和锁
- Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】
- zookeeper学习系列:二、api实践
- Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】
- Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】
- 困扰我多年的Connection reset问题
- scala学习笔记
- jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www
- 使用 Java Service Wrapper 启动java后台进程服务
- PHP码农在Golang压力下的生存之道-PHP性能优化实践
- golang使用 mongo
- CoreOS Linux引入了Kubernetes kubelet
- gwt之mvc4g
- 来自1000多个项目的10大JavaScript错误浅析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ACM-ICPC 2019 山东省省赛 C Wandering Robot
- 数据库SQL语言从入门到精通--Part 2--MySQL安装
- ACM-ICPC 2019 山东省省赛 A Calandar
- POJ 1845-Sumdiv(厉害了这个题)
- 数据库SQL语言从入门到精通--Part 1--SQL语言概述
- DP背包(一)
- 程序员最喜欢用的在线代码编译器,什么?你竟然不知道!可以在网页敲代码,运行调试!
- ZOJ 3623 Battle Ships
- POJ 2955 区间DP必看的括号匹配问题,经典例题
- POJ 3211 Washing Clothes
- 1745 Divisibility
- POJ 3616 Milking Time
- C++面向对象编程类对象的定义
- Codeforce 1102 C. Doors Breaking and Repairing
- CodeForces - 1102B Array K-Coloring