shell脚本变量及使用

1、变量类型

1.1 自定义变量

  • 定义变量: my_var=“Hello, world!”
  • 引用变量: echo $my_var
  • 只读变量: readonly my_var
  • 删除变量: unset my_var

使用花括号: 使用花括号 {} 可以帮助区分变量的边界,特别是在变量名后面有其他字符的情况下。
my_var="world"echo “Hello, ${my_var}!”

1.2 特殊变量

特殊变量含义
$0脚本的文件名
$1, $2, …脚本的第n个参数
$#脚本参数的个数
$?最后一个命令的退出状态码
$$当前 Shell 进程的 PID
$USER当前用户的用户名
$HOME当前用户的主目录
$*获取所有参数,并将每个参数作为单独字符返回
$@将所有参数包括空白符一起作为一个字符返回

1.3 环境变量

环境变量是全局可用的变量,用于存储与当前 Shell 会话相关的信息。

定义变量:export PATH=“/bin:/usr/bin:/usr/local/bin”

2、read从键盘读入变量值

2.1 read 命令

语法:read [-options] [variable_name]

read 命令常用的选项:

常用选项含义
-p prompt显示提示符,提示用户输入
-a array将输入的数据按照空格分割存储到数组中。
-d delimiter指定输入的结束符。
-r取消对反斜杠的特殊处理(默认情况下,反斜杠用于转义特殊字符)。
-n num_chars指定读取的字符数。
-s静默模式,用户输入不会显示在屏幕上。
-t timeout设置超时时间,在超时后 read 命令会自动退出。

2.2 用法介绍

  • 基本用法
#!/bin/bash

echo "Please enter your name:"

read name

echo "Hello, $name! Welcome to our website."

运行该脚本时,输出如下:

Please enter your name:

Alice

Hello, Alice! Welcome to our website.
  • 存储到数组中
read -a numbers

这会等待用户输入一组数字,每个数字以空格分隔,并将它们存储到 numbers 数组中。

  • 指定分隔符
IFS="," read -ra names

使用逗号作为分隔符,等待用户输入一组名称,每个名称以逗号分隔,并将它们存储到 names 数组中。

  • 超时处理
if read -t 10 -p "Enter your choice: " choice; then

	echo "You entered: $choice"else

	echo "Timed out!"fi

等待用户输入,并在 10 秒内输入完成后存储到 choice 变量中。如果超过了超时时间,则显示 “Timed out!”。

3、双引号,单引号,反单引号

3.1 双引号(")

  • 双引号用来创建包含变量和特殊字符(如空格、*、?、$等)的字符串。

  • 在双引号中,变量会被解析并替换为其对应的值,而不是直接作为字符串输出。

  • 特殊字符(如 $、*、?、\ 等)在双引号中会被解释为其特殊含义,而不是字面量。

  • 双引号中的反斜杠(\)用来转义特殊字符,使其失去特殊含义。

3.2 单引号(')

  • 单引号用来创建纯文本字符串,其中的内容会被原样输出,不会进行变量替换和特殊字符解释。
  • 在单引号中,一切内容都被视为普通字符,没有特殊含义。
  • 单引号字符串内部不能使用单引号,但可以使用双引号、反斜杠等。

比较双引号和单引号的区别:

var="world"echo "Hello, $var!"  # 输出:Hello, world!

echo 'Hello, $var!'  # 输出:Hello, $var!

3.3 单反引号(``)

  • 在 Shell 脚本中用于执行命令,并将命令的输出结果作为字符串返回。
  • 单反引号的作用类似于 $()` 语法。

例如,假设有一个命令 date 用于获取当前日期和时间,可以将其输出结果赋值给变量 current_date:

current_date=`date`

echo "Current date and time: $current_date"

或者使用 $() 语法:

current_date=$(date)

echo "Current date and time: $current_date"

这将输出当前的日期和时间。

需要注意的是,在较新版本的 Bash 中,建议使用 $() 语法而不是单反引号,因为 $() 语法更加清晰易读,并且可以嵌套使用,而单反引号不支持嵌套。

4、变量的运算

4.1 整数运算

  • 使用 $((…)) 进行算术运算
# 定义两个整数变量

a=10

b=5

# 加法sum=$((a + b))

# 减法

difference=$((a - b))

# 乘法

product=$((a * b))

# 除法

quotient=$((a / b))

# 求余数

remainder=$((a % b))
  • 使用 expr 进行算术运算
# 加法sum=$(expr $a + $b)

# 减法

difference=$(expr $a - $b)

# 乘法

product=$(expr $a \* $b)  # 乘法符号需要转义

# 除法

quotient=$(expr $a / $b)

# 求余数

remainder=$(expr $a % $b)
  • 使用 let 进行算术运算
# 加法let "sum = a + b"

# 减法let "difference = a - b"

# 乘法let "product = a * b"

# 除法let "quotient = a / b"

# 求余数let "remainder = a % b"

4.2 小数运算

  • 使用 bc 命令:

bc 是一种用于数学计算的命令行工具,在大多数 Linux 和 Unix 系统中都是默认安装的。它支持高精度的小数运算,可以用于 Shell 脚本中进行小数运算。

例如,计算两个小数的加法:

result=$(echo "3.14 + 2.78" | bc)
echo "Result is: $result"
  • 使用其他编程语言或工具

如果需要更复杂或高级的小数运算,可以考虑使用其他编程语言,如 Python、Perl 或 awk 等,这些语言都提供了更强大的数学计算能力。
例如,使用 Python 计算两个小数的乘法:

result=$(python -c "print(3.14 * 2.78)")

echo "Result is: $result"

5、shell变量配置文件

5.1 常用变量配置文件

  1. /etc/profile

    全局设置,针对所有用户生效
    /etc/profile 是系统级别的 Bash Shell 配置文件,用于设置全局的环境变量和执行系统范围内的初始化工作。当用户登录时,首先会执行该文件。它通常包含系统范围的环境变量设置和全局的 Shell 配置。

    在 /etc/profile 中,可以定义系统范围内的环境变量,这些变量对系统中的所有用户和进程都是全局可见的。此外,还可以在这个文件中执行一些初始化工作,如设置全局的命令别名、导出函数、配置系统范围的默认环境等。

    一般情况下,/etc/profile 文件是系统管理员用来配置系统范围内的默认环境的地方。它对于所有用户都起作用,但用户也可以在自己的用户级别配置文件中覆盖或补充这些设置。当用户登录(login)时,文件会被执行,并从/etc/profile.d目录的配置文件中查找shell设置

    在编辑 /etc/profile 文件时,请谨慎操作,因为它会影响到整个系统的运行环境。任何不正确的更改都可能导致系统功能异常或不稳定。

  2. /etc/bashrc:

    系统级别的配置文件,用于设置全局的 Bash Shell 配置。

    与 /etc/profile 文件类似,但更专注于 Bash Shell 的配置。该文件通常包含一些 Bash Shell 的全局配置,如命令别名、提示符等。

  3. ~/.profile

    用户级别的 Bash Shell 配置文件,用于个人用户的环境变量设置和其他初始化工作。它位于用户的主目录(通常是 /home/username)下,是用户登录时 Bash Shell 默认加载的文件之一。

    在 ~/.profile 文件中,用户可以定义个性化的环境变量和执行个人用户级别的初始化工作。这些设置和操作会在用户登录时自动执行,因此可以确保用户每次登录时都会获得相同的环境和配置。

    通常情况下,~/.profile 文件用于设置个人用户的环境变量,如 PATH、JAVA_HOME 等,以及执行其他个性化的初始化工作,如设置命令别名、定义个人函数等。用户可以根据自己的需求自定义这个文件,以满足自己的个性化配置需求。

    需要注意的是,~/.profile 文件仅在用户登录时才会被加载,而不会在每次启动新的交互式 Bash Shell 时加载。因此,如果需要在每次启动新的交互式 Bash Shell 时都执行一些操作,可以考虑使用 ~/.bashrc 文件。

  4. ~/.bash_login

    用户级别的配置文件,用于个人用户的 Bash Shell 配置。当用户使用登录 Shell 登录时,会加载该文件。不是所有 Linux 系统都默认使用此文件。

  5. ~/.bash_profile

    同样是用户级别的配置文件,用于个人用户的 Bash Shell 配置。与 ~/.bash_login 功能类似,但在某些系统中可能会更常见。在用户登录时加载。

  6. ~/.bashrc

    用户级别的配置文件,用于个人用户的 Bash Shell 配置。在每次启动新的交互式 Bash Shell 时加载。通常包含个性化的 Bash Shell 配置,如命令别名、提示符等。

  7. ~/.bash_logout

    用户级别的配置文件,用于个人用户的 Bash Shell 配置。在用户退出登录时执行。通常用于清理临时文件或执行其他清理工作。

5.2 配置文件执行顺序

  • 系统级别的配置文件

/etc/profile:系统级别的 Bash Shell 配置文件,在用户登录时执行。

/etc/bashrc:系统级别的 Bash Shell 配置文件,在每次启动新的交互式 Bash Shell 时执行。

  • 用户级别的配置文件:

~/.bash_profile:用户级别的 Bash Shell 配置文件,在用户登录时执行。如果存在此文件,则忽略 ~/.bash_login。

~/.bash_login:用户级别的 Bash Shell 配置文件,在用户登录时执行。

~/.profile:用户级别的 Bash Shell 配置文件,在用户登录时执行。

  • 每次启动交互式 Bash Shell 时执行的文件

~/.bashrc:用户级别的 Bash Shell 配置文件,在每次启动新的交互式 Bash Shell 时执行。

  • 用户退出登录时执行的文件

~/.bash_logout:用户级别的 Bash Shell 配置文件,在用户退出登录时执行。

总结起来,执行顺序是在用户登录时首先执行系统级别的配置文件,然后执行用户级别的配置文件,最后执行每次启动交互式 Bash Shell 和退出登录时的用户级别配置文件。

  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值