1.6 Shell 变量的类型
Shell 变量分为四类,分别是
- 自定义变量
- 环境变量
- 位置变量
- 预定义变量
根据工作要求临时定义的变量称为自定义变量;
环境变量 一般是指用 export 内置命令导出的变量,用于定义 Shell 的运行环境,保证 Shell 命令正确执行,如 $0、1、#;
从命令行、函数或脚本执行等传递参数时,$0、$1 称为特殊位置变量;
预定义变量 是在 bash (Linux 系统的默认 Shell)中已有的变量,可以直接使用,如 **@、***等。
1.6.1 自定义变量
自定义变量可以理解为局部变量或普通变量,只能在创建它们的 Shell 函数或 Shell 脚本中使用。
自定义变量的说明如下:
自定义变量表的说明 | |
---|---|
定义自定义变量 | 变量名=变量值 变量名必须以字母或下画线开头,区分大小写。 如 IP1=192.168.2.115 |
使用自定义变量 | $变量名 |
查看自定义变量 | echo $变量名 set (所有变量:包括自定义变量和环境变量) |
取消自定义变量 | unset 变量名 |
自定义变量作用范围 | 仅在当前 Shell 中有效 |
1.6.2 环境变量
环境变量也可以称为全局变量,可以在创建它们的 Shell 及其派生出来的任意子进程 Shell 中使用。
环境变量的说明如下:
环境变量表说明 | |
---|---|
定义环境变量 | 使用 export 命令声明即可。 例如,export back_dir =/home/backup 再如,export back_dir 将自定义变量转换为环境变量 |
使用环境变量 | $变量名 或 ${变量名} |
查看环境变量 | echo $变量名 ,或 env 例如,`env |
取消环境变量 | unset 变量名 |
环境变量作用范围 | 在当前 Shell 和子 Shell 中有效 |
1.6.3 位置变量
在 Shell 中存在一些位置变量。位置变量用于在命令行,函数或脚本中传递参数,其变量名不用自己定义,其作用也是固定的。执行脚本时,通过在脚本后面给出具体的参数(多个参数用空格隔开)对应的位置变量进行赋值。
$0
代表命令本身,$1~$9
代表接收的第 1 ~ 9 个参数,$10
以上需要用 {}
括起来,如 ${10}
代表接收的第 10 个参数。
1.6.4 预定义变量
预定义变量在 Shell 中可以直接使用,位置变量也是预定义变量的一种。
-
预定义变量的说明如下:
预定义变量说明表 $0
脚本名 $*
所有参数列表,将所有参数当作一个单词。 `$@ 所有参数列表,每个参数视为一个独立的字符串。 $#
参数的个数 $$
当前进程的 PID $!
上一个后台进程的 PID $?
上一个命令的返回值,0 表示成功 -
预定义变量示例脚本如下:
bash#!/bin/bash # 打印脚本名 echo "脚本名: \$0" # 打印所有参数作为一个单词 echo "所有参数作为一个单词(\$*): $*" # 打印每个参数作为一个独立的字符串 echo "每个参数作为一个独立字符串(\$@): $@" # 打印参数个数 echo "参数个数(\$#): $#" # 打印当前进程ID echo "当前进程ID(\$$): $$" # 打印上一个后台进程的进程ID echo "上一个后台进程的进程ID(\$!): $!" # 打印上一个命令的退出状态 echo "上一个命令的退出状态(\$?): $?"
1.7. Shell 变量的赋值
Shell 变量赋值方式有五种:
- 直接赋值
- 从键盘读入赋值
- 使用命令行参数赋值
- 利用命令的输出结果赋值
- 从文件中读入数据赋值
直接赋值也就是定义变量
从键盘读入赋值是指将 bash 的内置命令 read 读入的内容赋值给变量
在命令行 Shell 下输入的参数内容称为使用命令行参数赋值
利用命令的输出结果赋值是指将命令行的执行结果赋值给变量
从文件中读数据赋值就是把文件内容赋值给变量
1.7.1 直接赋值
在 Shell 中,当第一次使用某变量名时,实际上就已经给变量赋值了。
直接赋值的格式为 变量名=变量值
,如,name=tinyun
。为了避免歧义,直接赋值时禁止在等号两边添加空格,这跟常见的编程语言有所不同。
直接赋值举例如下:
bash
a=3
上面语句中的 =
不是数学中的等号,而是赋值运算符,它的作用是将复制运算符右侧的值赋给左侧,其中,右侧的 3 就是变量的值,左侧的 a 就是变量名,a 被赋值后,a 就代表了 3.
1.7.2 从键盘读入赋值
在 Shell 脚本中, Shell 变量可以通过从键盘读入输入的内容来赋值。
命令格式为:
bash
read -p [提示信息][变量名]
示例脚本如下:
bash
#!/bin/bash
# 使用 -p 参数提示用户输入姓名并存储到变量中
read -p "请输入您的姓名:" name
# 使用 -p 参数提示用户输入年龄并存储到变量中
read -p "请输入您的年龄:" age
# 输出用户输入的姓名和年龄
echo "您输入的姓名是:$name"
echo "您输入的年龄是:$age"
1.7.3 使用命令行参数赋值
使用命令行参数赋值是直接在命令后面跟参数,系统用 $1
来调用第一个参数,用 $2
调用第二个参数,这种赋值方法适用于参数经常变化且不需要交互的情况。
示例脚本如下:
bash
#!/bin/bash
# 输出第一个和第二个命令行参数
echo "第一个参数是:\$1"
echo "第二个参数是:\$2"
1.7.4 利用命令的输出结果赋值
在 Shell 程序中,可以将一个命令的输出结果当作变量的值,不过需要在赋值语句中使用反向单引号。
这种赋值方法可以直接处理上一个命令产生的数据。在生产环境中,把命令的结果作为变量的内容进行赋值的方法,在脚本开发时很常见。
示例脚本如下:
bash
#!/bin/bash
# 使用反引号将命令的输出结果赋值给变量
output=`ls -l`
echo "使用反引号赋值的结果:"
echo "$output"
# 使用 $() 将命令的输出结果赋值给变量
output2=$(pwd)
echo "使用 `$变量名` 赋值的结果:"
echo "$output2"
1.7.5 从文件中读入
python
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('example.xlsx', sheet_name='Sheet1')
# 打开一个新的文本文件,准备写入数据
with open('output.txt', 'w') as file:
# 遍历 DataFrame 的每一行,将每行的数据写入文件
for index, row in df.iterrows():
file.write(','.join(map(str, row.values)))
file.write('\n')
print("数据已成功写入 output.txt 文件")