shell变量

本贴最后更新于 3095 天前,其中的信息可能已经东海扬尘

一、基本操作

变量赋值

直接用等号赋值,中间不要加任何空格。如:name=zhangsan

 

获取变量的值

$VAR_NAME

如:echo $name

如果需要在变量基础上累加内容,尽量用双引号将变量括起来以免和后面的字符连起来造成混淆。

如:PATH="$PATH":/home/bin

 

加双引号会有几点不同
* 作为整体“保护”起来,不会引起混淆

* 不会忽略换行符

wangsch@wangsch-pc:/tmp/test$ touch a b c

wangsch@wangsch-pc:/tmp/test$ files=`ls -l`
wangsch@wangsch-pc:/tmp/test$ echo $files 总用量 0 -rw-rw-r-- 1 wangsch wangsch 0 6月 1 16:32 a -rw-rw-r-- 1 wangsch wangsch 0 6月 1 16:32 b -rw-rw-r-- 1 wangsch wangsch 0 6月 1 16:32 c

wangsch@wangsch-pc:/tmp/test echo "files"
总用量 0
-rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 a
-rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 b
-rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 c

wangsch@wangsch-pc:/tmp/test echo {files}
总用量 0 -rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 a -rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 b -rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 c

wangsch@wangsch-pc:/tmp/test echo "{files}"
总用量 0
-rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 a
-rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 b
-rw-rw-r-- 1 wangsch wangsch 0 6 月 1 16:32 c

不加双引号,会显示成一行(上面可能看到不是一行,这只是被博客的编辑器强硬的换行了!),加了双引号,就按原样显示了

* 如果变量出现在判断条件中,尽量用双引号括起来(尤其变量是个字符串的时候,可能包含空格)否则可能出错

 

${VAR_NAME}

上面$VAR_NAME的方式可以替换为${VAR_NAME},需要注意如果不想忽略换行,同样需要用双引号括起来。实际上,${VAR_NAME}的写法不是为了简单的获取变量值的,还能做字符串替换、删除等操作,后面会有说明。

 

 

算数运算

let、expr、((i=$j+$k))、bc

 

 

 

`pwd`等价于$(pwd)

 

source 等价于 . ,在当前(而不是另启动一个子shell)shell执行脚本或命令。

bash命令将开启子shell,echo $SHLVL查看当前所属的子shell层次,从1开始,依次递增

 

 

直接使用env和export,显示环境变量

$RANDOM是随机数,介于 0~32767 之间

 

直接使用declare和set,显示所有变量(含环境变量与自定义变量)

 

自定义变量和环境变量

 

export输出变量到子shell中(相反的,子shell不能导出到父shell)

 

数组元素要用${}引用:

wangsch@wangsch-pc:~$ arr[0]=hello
wangsch@wangsch-pc:~$ echo $arr[0]
hello[0]
wangsch@wangsch-pc:~$ echo ${arr[0]}
hello

 

使用${}实现

1. 变量内容的删除、取代与替换

变量配置方式 说明
${变量#关键词}
${变量##关键词}
若变量内容从头开始的数据符合『关键词』,则将符合的最短数据删除
若变量内容从头开始的数据符合『关键词』,则将符合的最长数据删除
${变量%关键词}
${变量%%关键词}
若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据删除
若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据删除
${变量/旧字符串/新字符串}
${变量//旧字符串/新字符串}
若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』
若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』

 

 

2. 变量的测试与内容替换

 

 

参考

http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_2.php

 

  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 74 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...