Shell 学习笔记 - 变量的类型 + 变量的赋值

1.6 Shell 变量的类型

Shell 变量分为四类,分别是

  • 自定义变量
  • 环境变量
  • 位置变量
  • 预定义变量

根据工作要求临时定义的变量称为自定义变量

环境变量 一般是指用 export 内置命令导出的变量,用于定义 Shell 的运行环境,保证 Shell 命令正确执行,如 $0、1、#;

从命令行、函数或脚本执行等传递参数时,$0、$1 称为特殊位置变量

预定义变量 是在 bashLinux 系统的默认 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 文件")
相关推荐
卫生纸不够用8 分钟前
子Shell及Shell嵌套模式
linux·bash
stm 学习ing9 分钟前
HDLBits训练6
经验分享·笔记·fpga开发·fpga·eda·verilog hdl·vhdl
world=hello21 分钟前
关于科研中使用linux服务器的集锦
linux·服务器
枫零NET22 分钟前
学习思考:一日三问(学习篇)之匹配VLAN
网络·学习·交换机
stm 学习ing41 分钟前
HDLBits训练4
经验分享·笔记·fpga开发·课程设计·fpga·eda·verilog hdl
沐泽Mu1 小时前
嵌入式学习-QT-Day07
c++·qt·学习·命令模式
沐泽Mu1 小时前
嵌入式学习-QT-Day09
开发语言·qt·学习
炸毛的飞鼠1 小时前
汇编语言学习
笔记·学习
soragui1 小时前
【ChatGPT】OpenAI 如何使用流模式进行回答
linux·运维·游戏
风无雨1 小时前
react杂乱笔记(一)
前端·笔记·react.js