shell变量的定义
定义变量
- 定义变量的时候直接使用变量名就行,不需要加
$
符号 - 变量名和变量值、等号之间
不能有空格
。
变量命名规范
- 命名只能使用英文字母、数字、下划线,首字母不能以数字开头
- 不能使用系统预留的关键字
命令 | 含义 |
---|---|
! | 保留字,逻辑非 |
: | 不做任何事,只做参数展开 |
. | 读取文件并在shell中执行它 |
alias | 设置命令或命令行别名 |
bg | 将作业置于后台运行 |
bind | 将关键字序列与readline函数或宏捆绑 |
break | 保留字,跳出for、while、until、select循环 |
builtin | 调用命令的内建命令格式,而禁用同名的函数。或者同名的扩展命令 |
case | 保留字,多重选择 |
cd | 切换当前工作目录 |
command | 找出内建和外部命令;寻找内建命令而非同名函数 |
continue | 保留字,到达下次for、while、until、select循环 |
declare | 声明变量定义变量属性 |
dirs | 显示当前存储的列表 |
disown | 将作业从列表中移除 |
do | 保留字,for、while、until、select循环的一部分 |
done | 保留字,for、while、until、select循环的一部分 |
echo | 打印参数 |
elif | 保留字,if结构的一部分 |
else | 保留字,if结构的一部分 |
enable | 开启和关闭内建命令 |
esac | 保留字,case的一部分 |
eval | 将参数作为命令再次处理一遍 |
exec | 以特定程序取代shell或为shell改变I/O |
exit | 退出shell |
export | 将变量声明为环境变量 |
fc | 与历史命令一起运行 |
fg | 将作业置于后台运行 |
fi | 保留字,if循环的一部分 |
for | 保留字,for循环的一部分 |
function | 定义一个函数 |
getops | 处理命令行选项 |
hash | 记录并指定命令的路径名 |
help | 显示内建命令的帮助信息 |
history | 显示历史信息 |
if | 保留字,if循环的一部分 |
in | 保留字,case、for、select循环的一部分 |
jobs | 显示后台运行的作业 |
kill | 向进程传送信号 |
let | 使变量执行算术运算 |
local | 定义局部变量 |
logout | 从Shell中注销 |
popd | 从目录栈中弹出目录 |
pushd | 将目录压入栈 |
pwd | 显示当前工作目录 |
read | 从标准输入中读取一行 |
readonly | 将变量定义为只读 |
return | 从函数或脚本返回 |
select | 保留字,生成菜单 |
set | 设置Shell选项 |
shift | 变换命令行参数 |
suspend | 终止Shell的执行 |
test | 评估条件表达式 |
then | 保留字,if结构的一部分 |
time | 保留字,输出统计出来的命令执行时间,其输出格式由TIMEFORMAT变量来控制 |
times | 针对Shell及其子Shell,显示用户和系统CPU的时间和 |
trap | 设置扑捉程序 |
type | 确定命令的源 |
typeset | 声明变量,定义变量属性,与declare等价 |
ulimit | 设置和显示进程占用的资源限制 |
umask | 设置和显示文件权限码 |
unalias | 取消别名定义 |
unset | 取消变量或函数定义 |
until | 保留字,一种循环结构 |
wait | 等待后台作业完成 |
while | 保留字,一种循环结构 |
变量的使用
使用变量只需要在前面加$
即可
[root@hadoop-master ~]# my_name="leo825"
[root@hadoop-master ~]# echo $my_name
leo825
[root@hadoop-master ~]# echo ${my_name}
leo825
花括号加不加都行,主要视情况而定,如果会引起编译器歧义需要添加来区分变量边界
[root@hadoop-master ~]# echo "my name is ${my_name}"
my name is leo825
删除变量
[root@hadoop-master ~]# unset my_name
[root@hadoop-master ~]# echo ${my_name}
[root@hadoop-master ~]#
字符串的操作
单引号、双引号
[root@hadoop-master ~]# my_name="leo825"
[root@hadoop-master ~]# echo '单引号输出:${my_name}'
单引号输出:${my_name}
[root@hadoop-master ~]# echo "双引号输出:${my_name}"
双引号输出:leo825
[root@hadoop-master ~]# echo "双引号输出:\"${my_name}\""
双引号输出:"leo825"
根据上面的比较总结如下:
- 单引号的任何字符串都会原样输出,所以不要用单引号放置变量
- 双引号可以放置变量,并且可以使用转义字符
其他常见操作
获取字符串长度
[root@hadoop-master ~]# echo ${my_name}
leo825
[root@hadoop-master ~]# echo ${#my_name}
6
截取字符串
截取格式,这个是从左边开始计数:
${string: start :length}
其中,string 是要截取的字符串,start是起始位置(从左边开始,从0开始计数),lenth是要截取的长度(省略的话表示直到字符串的末尾)
[root@hadoop-master ~]# echo ${my_name}
leo825
[root@hadoop-master ~]# echo ${my_name:1:2}
eo
[root@hadoop-master ~]# echo ${my_name:1}
eo825
截取格式,这个是从右边开始计数:
${string: 0-start :length}
这种格式比上一种多了0-,这个是固定写法,代表是从字符串右边开始计数的。
这种方式要注意两点
- 从左边开始计数时,起始数字是0;从右边开始计数时,起始数字是1。计数方向不同,起始数字也不同。
- 不管从哪个方向开始计数,截取方向都是从左到右。
[root@hadoop-master ~]# echo ${my_name}
leo825
[root@hadoop-master ~]# echo ${my_name:0-3:2}
82
从右开始计数不太好理解,这个步骤是首先从右边开始第1个向左查第3个位是8,然后向右数2位就是82
获取字符串位置
[root@hadoop-master ~]# echo ${my_name}
leo825
[root@hadoop-master ~]# echo `expr index "$my_name" 8`
4
以上脚本中 “`” 是反引号,而不是单引号 “’”,不要看错了,需要执行指令的都需要反引号,就是Esc键正下方的那个键。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/72671.html