文档章节

linux下变量使用和扩展

沙米笔记
 沙米笔记
发布于 2016/08/26 11:04
字数 1216
阅读 37
收藏 1

变量定义

格式:变量名=变量值       

注意:1、’‘="两边不能有空格  

2、变量值,linux都会认为是字符串,如果有字符有空格,需要用双引号或单引号括起  

 3、变量值,双引号括起,会解释变量;而单引号不会,只会原样输出

eg:var="hello  world"

变量调用     

格式: $变量名 或者 ${变量名}

注意:1、如果变量名后还有其他字符串,需要将变量名用大括号{}括起来

eg:echo $var     输 出  hello world

       echo ${var}_green     输出 hello world_green

提高输出变量值的值,即将变量值作为下一个变量的名字(输出下一个变量的值)

abc_key="hello"
Informix=abc
temp=${Informix}_key
echo ${temp}
echo ${!temp}

 

export设置环境变量

格式:export   变量名=变量值

注意:export的效力仅及于该次登陆操作,如果希望长久有效,可以将其写在/etc/profile文件中(此文件是系统启动后自动加载的),或者将其写在/home/用户名/.bash_profile文件中(此文件是此用户登陆都自动加载的)。

命令:export  列出当前系统中的环境变量(包括临时的环境变量)

变量取消

格式:unset  变量名         eg:unset var

unset var=      (表示变量存在,但其值是null) 

变量扩展

测试变量是否为空    

方法1、[  -n $变量名  ]    变量为空,返回true,否则为false

方法2、${#变量名}     获取变量值的长度,为0,变量为空

var=
if [ -n $var ];then
echo "var is null"
else
echo "var is not null"
fi
# 输出 :var is null
echo ${#var}
#输出 :0

取字符串切片

格式1:${变量名:位置起点}

解释:由指定的字符串位置开始,截取字符串到字符串结束的位置

格式2:${变量名:位置起点:截取字符串长度}

解释:由指定的字符串位置开始,截取指定长度的字符串

abc_key="hello"
Informix=abc
temp=${Informix}_key
echo ${temp}
echo ${!temp}

输出 :hello

计算字符串长度

格式1:${#变量名}

格式2:echo ${变量名} | wc -c           统计的是字节数比字符串长度多1(可能是结束符)

格式3:expr length  "${变量名}"

# echo ${#var}
15
# echo ${var} | wc -c
16
# expr length "$var"
15

字符串替换

格式1:${变量/ 样式 / 替换的字符串}    替换第一个与样式匹配的,样式可以包含正则表达式(下面都可以)

格式2:${变量// 样式 / 替换的字符串}   替换全部匹配的

# var="da :: bai :: ni :: hao"
# echo $var
da :: bai :: ni :: hao
# echo ${var/::/_}
da _ bai :: ni :: hao
# echo ${var//::/_}
da _ bai _ ni _ hao

补充:

语法 用途
${变量 /# 样式 / 替换的字符串} 替换第一个,但是从变量值开头首字符开始匹配,不匹配,不替换
${变量 /% 样式 / 替换的字符串} 替换第一个,但是从变量值尾部尾字符开始匹配,不匹配,不替换
# echo ${var}
da :: bai :: ni :: hao
# echo ${var/#da/hh}
hh :: bai :: ni :: hao
# echo ${var/#::/hh}

删除字符串

格式1:${变量 / 样式/}    删除第一个与样式匹配

格式2:${变量 // 样式/}   删除全部匹配的

其实就是字符串替换搁置中替换后的字符串变为空。

语法 用途
${变量 /# 样式/} 删除第一个,但是从变量值开头首字符开始匹配,不匹配,不删除
${变量 /% 样式/} 删除第一个,但是从变量值尾部尾字符开始匹配,不匹配,不删除
# echo ${var}
da :: bai :: ni :: hao
# echo ${var/#::/}
da :: bai :: ni :: hao
# echo ${var/#da/}
:: bai :: ni :: hao

其他

语法 用途
${变量#样式} 与前面对比,删除最短的匹配,首字符不匹配就不删除了
${变量##样式} 与前面对比,删除最长的匹配,首字符不匹配就不删除了
${变量%样式} 与后面对比,删除最短的匹配,首字符不匹配就不删除了
${变量%%样式} 与后面对比,删除最短的匹配,首字符不匹配就不删除了
# var="/home/dxx/test/mypro"
# echo ${var#*/}
home/dxx/test/mypro
# echo ${var##*/}
mypro
# echo ${var#bai*/}
/home/dxx/test/mypro

提取指定变量名

格式:${!开头字符串@}  或者  ${!开头字符串*}
把所有一指定字符串开头的变量名列出

filename="ntupdate"
dir="adsf"
dir_file="12313"
echo ${!di@}        

输出:dir dir_file

取命令参数

语法 解释
$0 命令名字
$1-$n 第一个到第n个的参数
$* 所有的位置参数 
$# 位置参数的个数
$? 上一个命令执行的结果    0 成功,非0有误
$$ 目前的进程编号
${@:起点} 由起点开始,取得后面的位置参数
${@:起点:个数} 由起点开始,取得后面指定个数的位置参数

 

© 著作权归作者所有

沙米笔记
粉丝 29
博文 43
码字总数 45024
作品 0
深圳
程序员
私信 提问
删除一个目录下部分类型之外所有文件的三种方法

有的时候,你可能会遇到这种情况,你需要删除一个目录下的所有文件,或者只是简单的通过删除除了一些指定类型(以指定扩展名结尾)之外的文件来清理一个目录。 在这篇文章,我们将会向你展现...

局长
2016/11/14
2.8K
28
主流嵌入式Linux动态扩展技术比较分析

随着嵌入式技术的快速发展和嵌入式设备的普及,嵌入式应用发展的一个关键趋势是从静态的、固定的系统功能到动态的、可扩展的系统功能。 本文主要进行嵌入式Linux系统内核动态扩展技术的讨论。...

jtihj
2009/12/19
270
0
Linux下安装JDK或JRE

作为Java开发,在自己的Linux开发环境下安装JDK、在Linux服务器上安装JRE,都是家常便饭的事情,JDK或者JER都有Java官网编译好的可执行二进制包,下载二进制包,安装是很简单的,在系统中配置...

calmsnow
2018/12/21
321
0
Linux 内核中的 GCC 特性

GCC 和 Linux 是出色的组合。尽管它们是独立的软件,但是 Linux 完全依靠 GCC 在新的体系结构上运行。Linux 还利用 GCC 中的特性(称为扩展)实现更多功能和优化。本文讨论一些重要的扩展,讲...

红薯
2009/04/07
726
1
/etc/profile和/etc/environment的区别

/etc/profile 文件 当一个用户登录Linux系统或使用 命令切换到另一个用户时,设置用户环境第一个读取的文件就是 ,此文件为系统全局变量配置文件,且仅仅在第一次登录系统时才会全局运行 。 ...

calmsnow
2018/12/17
179
0

没有更多内容

加载失败,请刷新页面

加载更多

队列-顺序(c/c++实现)

队列是在线性表功能稍作一改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。 队列(顺序)实现的三个步骤: 定义所需的功能(...

白客C
32分钟前
5
0
安装tomcat部署网站/nginx代理tomcat/tomcat部署多个网站

来源:https://blog.csdn.net/Powerful_Fy 安装jdk: Oracle官方下载 https://www.oracle.com/technetwork/java/javase/downloads/index.html yum安装openjdk: 1.查找可使用的jdk包: [roo......

asnfuy
40分钟前
4
0
Linux 安装 Android studio

官网下载linux 版本 android xxxxx-xxxx.tar.gz 然后 找到它 解压缩 得到 android-studio文件夹 执行 [root@monkey java]# mv ./android-studio /opt [root@monkey java]# cd /opt/android-s......

MrLins
43分钟前
5
0
VMware vSphere虚拟机的迁移

VMware vSphere 6.7下,虚拟机的迁移按照移动的内容,可以分为4种: 1)冷迁移(cold migration) 2)热迁移(vMotion) 3)存储热迁移(storage vMotion) 4)完全热迁移(shared-nothing ...

大别阿郎
43分钟前
4
0
SpringCloud——Docker部署eureka集群

Docker部署eureka集群 一、环境准备 1.docker环境 centos7下的安装:https://www.jianshu.com/p/ec02810d6a2b docker常用命令:https://www.jianshu.com/p/af7977b1075c 没有用过docker的最好......

devils_os
43分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部