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 脚本参数相关
$0Shell本身的文件名$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

浙公网安备 33010602011771号