在shell中,变量分为全局变量,局部变量,脚本变量三大类。其次,变量的类型只有字符串,只有在数字运算的时候解释器才会把数字解释成数字。
变量的定义:变量名=变量值
例如:
python@ubuntu:~/Desktop$ user=python # 当前终端定义变量user的值为python
本地变量是:在当前系统的某个环境下才能生效的变量,作用范围小。
本地变量包含两种:普通变量和命令变量
普通变量的定义方式有如下三种:
变量名=变量值
name1 = hello
重点:变量值必须是一个整体,中间没有特殊字符
变量名=‘变量值’
变量名=“变量值”
用来把终端命令的输出结果保存到变量中
命令变量有两种定义方式
python@ubuntu:~/Desktop$ list = `ls`
输出list结果为ls在命令行查询后的结果
python@ubuntu:~/Desktop$ list = $(ls)
注意: 命令变量必须是linux中的可执行命令
全局变量:在当前系统的所有环境下都能生效的变量,如$PATH
环境是什么
环境是:每打开一个终端是一个shell环境,使用非source执行方式时,会开启子进程,也是一个shell环境,称为子shell环境。
查看全局变量
使用命令 env (# 只显示全局变量,主要是加载了~/.bashrc和/etc/profile文件)
python@ubuntu:~/Desktop$ env
XDG_VTNR=7
LC_PAPER=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
.....
注意:自定义的全局变量只能在该终端和该终端启动的进程中使用
定义变量:变量名=值
全局变量演示:
python@ubuntu:~/Desktop$ env | grep user # 当前全局变量中没有user变量
python@ubuntu:~/Desktop$ export user=python3
python@ubuntu:~/Desktop$ env | grep user # 当前全局变量中有user变量
user=python3
打开新的终端执行env命令:
python@ubuntu:~/Desktop$ env | grep user # 当前全局变量中没有user变量
python@ubuntu:~/Desktop$
如果想要自己定义的全局变量在跟系统的全局变量一样在所有环境都有效,需要在~/.bashrc或/etc/profile文件中定义:
查看
python@ubuntu:~/Desktop$ str1 = "hello world"
python@ubuntu:~/Desktop$ echo ${str1}-bak
hello world-bak
取消变量
内置变量是shell内部提供的一些经常用到的实用功能
如:
python@ubuntu:~/Desktop$ touch example.sh
#!/bin/bash
echo "This is a example"
echo "filename: $0"
python@ubuntu:~/Desktop$ bash example.sh
This is a example
filename: example.sh
echo "file_pid: $$"
python@ubuntu:~/Desktop$ bash example.sh
This is a example
filename: example.sh
file_pid: 24013
# 获取当前脚本传入的参数数量
echo "当前脚本传入的参数数量是: $#"
# 获取指定位置的参数
echo "第一个位置的参数是: $1"
echo "第二个位置的参数是: $2"
echo "第三个位置的参数是: $3"
echo "第四个位置的参数是: $4"
python@ubuntu:~/Desktop$ bash example.sh a b c d e
This is a example
filename: example.sh
file_pid: 24059
当前脚本传入的参数数量是: 5
第一个位置的参数是: a
第二个位置的参数是: b
第三个位置的参数是: c
第四个位置的参数是: d
python@ubuntu:~/Desktop$
终端执行命令如下:
python@ubuntu:~/Desktop$ bash nihao # 不存在nihao文件
python@ubuntu:~/Desktop$ bash: nihao: No such file or directory
python@ubuntu:~/Desktop$ echo $?
127
python@ubuntu:~/Desktop$ ls
file1.sh num.sh test.sh weizhi.sh
python@ubuntu:~/Desktop$ echo $?
0
python@ubuntu:~/Desktop$ file="abcdefg"
# 从第1个字符开始,截取5个字符
python@ubuntu:~/Desktop$ echo ${file:0:5}
abcde
# 从第3个字符开始,截取5个字符
python@ubuntu:~/Desktop$ echo ${file:2:5}
cdefg
# 从倒数第5个字符开始,截取之后的5个字符
python@ubuntu:~/Desktop$ echo ${file:0-5:5}
cdefg
如果输入的参数为空,那么输出内容是 “您选择的套餐是: 套餐 1”
如果输入的参数为n,那么输出内容是 “您选择的套餐是: 套餐 n”
脚本内容如下:
#!/bin/bash
# 套餐选择演示
a="$1"
echo "您选择的套餐是: 套餐 ${a:-1}"