Shell变量
2020-02-07 本文已影响0人
村东头老骥
Shell 变量
变量的分类
- 本地变量
- 全局变量
- shell 内置变量
本地变量
本地变量就是:在当前系统的某个环境下才能生效的变量,作用范围小。
本地变量的分类
- 普通变量
- 命令变量
普通变量
方式一:
变量名=变量值
重点:变量值必须是一个整体,中间没有特殊字符
方式二:
变量名='变量值'
重点:我看到的内容,我就输出什么内容
方式三:
变量名="变量值"
重点:如果变量值范围内,有可以解析的变量A,那么首先解析变量A,将A的结果和其他内容组合成一个整体,重 新赋值给变量B
命令变量
定义方式一:
变量名=`命令`
注意:` 是反引号
定义方式二:
变量名=$(命令)
全局变量
全局变量就是:在当前系统的所有环境下都能生效的变量。
查看全局变量命令 可以通过命令查看环境变量 env
定义全局变量
方法一:
变量=值 export 变量
方法二:
(最常用) export 变量=值
变量查看和取消
方式一:$变量名 场景:私下里,在命令行/脚本中使用 图省事
方式二:"$变量名" 场景:私下里,在命令行/脚本中使用 图省事
方式三:${变量名} 场景:echo " dsa dsafsa dsafsa ${变量名} f " 使用频率较高
方式四:"${变量名}" 场景:标准使用方式
取消变量
unset 变量名
Shell内置变量
-
$0
获取当前执行的shell脚本文件名 -
$n
获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大 括号括起来${10} -
$#
获取当前shell命令行中参数的总个数 -
$?
获取执行上一个指令的返回值(0为成功,非0为失败)
$0 获取脚本的名称
#!/bin/bash
# 获取脚本的名称
echo "我脚本的名称是: file.sh"
echo "我脚本的名称是:$0"
$# 获取当前脚本传入参数的数量
- $n 获取当前脚本传入的第n个位置的参数
#!/bin/bash
# 获取当前脚本传入的参数数量
echo "当前脚本传入的参数数量是: $#"
# 获取指定位置的参数
echo "第一个位置的参数是: $1"
echo "第二个位置的参数是: $2"
echo "第三个位置的参数是: $3"
echo "第四个位置的参数是: $4"
$? 获取文件执行或者命令执行的返回状态值
# bash nihao bash: nihao: No such file or directory
# echo $? 127
# ls
file1.sh num.sh test.sh weizhi.sh
# echo $? 0
字符串的精度获取
格式:${变量名:起始位置:截取长度}
示例
${file:0:5} 从第1个字符开始,截取5个字符
${file::5} 从第1个字符开始,截取5个字符
${file:5:5} 从第6个字符开始,截取5个字符
${file:5} 从第6个字符开始,截取后面所有的字符
${file:0-5} 从倒数第5个字符开始,截取后面所有的字符
${file:0-6:3} 从倒数第6个字符开始,截取之后的3个字符
变量的默认值
- 变量a如果有内容,那么就输出a的变量值
- 变量a如果没有内容,那么就输出默认的内容
${变量名:-默认值}
套餐示例
- 如果我输入的参数为空,那么输出内容是 "您选择的套餐是: 套餐 1"
- 如果我输入的参数为n,那么输出内容是 "您选择的套餐是: 套餐 n"
#!/bin/bash
# 套餐选择演示
a="$1"
echo "您选择的套餐是: 套餐 ${a:-1}"
无论变量a是否有内容,都输出默认值
格式
${变量名+默认值}
场景示例:不管我说国家法定结婚年龄是 多少岁,都输出 国家法定结婚年龄(男性)是 22 岁
#!/bin/bash
# 默认值演示示例二
a="$1"
echo "国家法定结婚年龄(男性)是 ${a+22} 岁"
变量的运算
[root@localhost shell]# n=$(expr 1 + 2)
[root@localhost shell]# echo $n
3
[root@localhost shell]# echo $[1+2]
3
[root@localhost shell]# echo $[ 1 + 2 ]
3
[root@localhost shell]# echo $((1+2))
3
条件测试
格式
- test 条件表达式
- [ 条件表达式 ]
- [[ 条件表达式 ]]
判断是否是一个目录
[root@localhost shell]# test -d /home/| echo $?
0
判断是否为一个文件
[root@localhost shell]# test -f ./test.sh| echo $?
0
判断是否是可执行文件
[root@localhost shell]# test -x ./test.sh| echo $?
0
判断是否为当前用户的文件
[root@localhost shell]# test -O ./test.sh| echo $?
0
判断文件是否存在
[root@localhost shell]# test -e ./test.sh| echo $?
0
判断文件是否可读
[root@localhost shell]# test -r ./test.sh| echo $?
0
判断变量的长度
[root@localhost shell]# say=hello
[root@localhost shell]# test -z $say | echo $?
1
[root@localhost shell]# no=''
[root@localhost shell]# test -z $no | echo $?
0
判断变量是否被定义
[root@localhost shell]# hello=word
[root@localhost shell]# test -z $hello | echo $?