shell基础-01 变量(自定义变量、环境变量、预制变量、变量运算、变量置换、变量默认值)
文章目录
1. 自定义变量和环境变量
-
书写习惯
自定义变量小写;环境变量大写。 -
区别
自定义变量:仅在该层shell中生效
环境变量:在该层shell及子shell中都生效
1.1 定义变
- 自定义变量
# 变量名=值
- 环境变量
# export 变量名=变量值
# export 自定义变量
1.2 查看变量
# env
1.3 取消定义
# unset 变量名
1.4 示例
定义一个变量aaa,写一个脚本打印变量aaa。
终端可以打印,但是脚本不能打印。
将变量定义为环境变量,脚本可以打印了。
[root@liubei tmp]# cat test.sh
#!/bin/bash
echo $aaa
[root@liubei tmp]# unset aaa
[root@liubei tmp]# echo $aaa
[root@liubei tmp]# cat test.sh
#!/bin/bash
echo $aaa
[root@liubei tmp]# aaa=123
[root@liubei tmp]# echo $aaa
123
[root@liubei tmp]# bash test.sh
[root@liubei tmp]# export aaa
[root@liubei tmp]# bash test.sh
123
2. 预制变量
2.1 脚本参数相关
$0
Shell本身的文件名$1 $2 ${10}
: 参数1 参数2 参数10$*
所有参数列表。以"$1 $2 … $n"
子串的形式输出所有参数。$@
所有参数列表。以"$1" "$2" … "$n"
数组的形式输出所有参数。$#
添加到shell的参数个数
2.2 命令返回值相关
$$
Shell本身的pid$!
上条shell的pid$?
上条命令结束代码
3. 变量定义方式
3.1 引号的用法
" "
双引号,表相对引用,也可以用 ${ }
' '
单引号,表绝对引用
``
反引号,表执行引用,也可以用 $()
3.2 交互式输入变量
# read -p "提示信息: " 变量名
参数:
-t 5
等待时间-n 2
允许接受字符数
4. 变量运算
4.1 整数
其实你会一种方法就行了
4.1.1 let (推荐)
- 语法
let 变量=计算公式
- 示例
# let sum=$aaa+$bbb;echo $sum
4.1.2 expr
- 语法
expr 计算公式
- 示例
[root@liubei ~]# aaa=2
[root@liubei ~]# bbb=3
[root@liubei ~]# expr $aaa + $bbb
5
支持 + - * / % ,输出不用echo
4.1.3 $(())
-
语法
$((运算公式))
-
示例
[root@liubei ~]# echo $((aaa+bbb))
5
支持 + - * / % **,输出需要echo
4.1.4 $[ ]
- 语法
$[ 计算公式 ]
- 示例
[root@nightingale ~]# echo $[$aaa+$bbb]
4.2 小数计算
利用bc计算器,这里大概了解一下即可,之后我会在《bc计算器》一节中说明
# echo "scale=保留小数位;11/3"|bc
5. 变量置换
5.1 内容删除
- 语法
${原字串 符号 要删部分}
符号:
#
从左最短删除##
从左最大删除%
从右最短删除%%
从右最大删除
说明:要删部分支持正则
- 示例
# url=www.baidu.com
# echo ${url#*.}
baidu.com
# echo ${url##*.}
com
# echo ${url%.*}
www.baidu
# echo ${url%%.*}
www
5.2 内容替换
- 语法
${原字串/旧内容/新内容}
符号:
/
替换一个//
替换所有
- 示例
[root@liubei ~]# url=www.baidu.baidu.com
[root@liubei ~]# echo ${url/baidu/liubei}
www.liubei.baidu.com
[root@liubei ~]# echo ${url//baidu/liubei}
www.liubei.liubei.com
6. 变量默认值
命令 | 变量未定义 | 变量值为空 | 变量非空值 |
---|---|---|---|
# echo ${变量-默认值} | 默认值 | 变量值(为空) | 变量值 |
# echo ${变量:-默认值} | 默认值 | 默认值 | 变量值 |
上表说明:
如第二行第二列,表示使用echo ${变量-值A}
命令打印,如果变量未定义
,则打印 值A。
- 示例
echo ${变量-值A}
打印,如果变量有值则打印变量值,如果没定义变量则打印默认值。
[root@liubei ~]# aaa=111
[root@liubei ~]# echo ${aaa-222}
111
[root@liubei ~]# unset aaa
[root@liubei ~]# echo ${aaa-222}
222
7. ++i 和 i++
7.1 i++
x=i++
表示,先x=i
再给i=i+1
。
# i=1
# let x=i++ //表示先把i的值给x,再给i递增。
# echo $i
2
# echo $x
1
7.2 ++i
x=++i
表示,先i=i+1
,再赋值给x
# i=1
# let x=++i //表示先给i递增,在把值给x
# echo $i
2
# echo $x
2