Shell脚本 —— Shell 变量

Shell脚本 ———— Shell 变量


基本介绍: 在Shell脚本中,变量是存储数据的基本单元,它们可以包含字符串、数字等,并在脚本中被引用和操作。用于保存命令的输出、用户输入、配置参数等。通过定义和使用变量,可以简化脚本的编写和维护。


变量的定义: Shell 变量不需要显式声明其类型,可以直接使用。


定义规则:
1、变量名必须以字母 (a-z, A-Z) 或下划线开头 ( _ )
2、变量名只能包含字母 (a-z, A-Z) 、数字 (0-9) 和下划线 ( _ )
3、变量名区分大小写,这意味着 VARvar 是两个不同的变量。
4、变量的赋值使用等号 (=),等号两边不能有空格。
5、规避特殊名称,特殊名称不能用于变量名。这些特殊名称通常与系统环境变量、内置命令或保留字冲突。 系统环境变量在Shell中有特定的意义和用途,重定义这些变量可能导致脚本或系统行为异常。以下是一些常见的系统环境变量:
  PATH: 定义可执行文件搜索路径。
  HOME: 用户的主目录。
  USER: 当前登录的用户名。
  SHELL: 当前Shell的路径。
  PWD: 当前工作目录。
  OLDPWD: 前一个工作目录。
  IFS: 内部字段分隔符,用于分隔单词的默认分隔符。

  • 示例:
_myVar="valid"
myVar2="valid"
2myVar="invalid"  # 错误,不能以数字开头
————————————————————————————————————————————————————————————————————
VAR="uppercase"
var="lowercase"
echo $VAR  # 输出:uppercase
echo $var  # 输出:lowercase

变量赋值:
1、直接使用等号 = 进行赋值,等号两边不能有空格。
2、使用 read 命令从用户读取输入,并赋值给变量,示例:

read user_input
echo "You entered: $user_input"

变量类型:
1、字符串变量: 用于存储文本数据,示例:

name="Alice"

2、数值变量: 用于存储数值数据,但在Shell中数值也是字符串形式,示例:

age=30

3、只读变量: 使用 readonly 命令将变量标记为只读,防止其值被修改,示例:

readonly pi=3.14

4、删除变量: 使用 unset 命令删除变量,示例:

unset my_variable

变量的使用方式:
1、直接引用: 使用美元符号 $ 直接引用变量的值,示例:

my_variable="Hello, World!"
echo $my_variable  # 输出:Hello, World!

2、双引号 " " 引用: 使用双引号包围字符串,可以保留变量的值,并进行变量替换, 示例:

greeting="Hello"
name="Alice"
echo "$greeting, $name!"  # 输出:Hello, Alice!

3、单引号 ’ ’ 引用: 使用单引号包围字符串,完全保留其内容,不进行变量替换, 示例:

greeting="Hello"
echo '$greeting, World!'  # 输出:$greeting, World!

4、花括号引用: 使用花括号 {} 包围变量名,可以清晰地界定变量边界,避免歧义,示例:

name="Alice"
echo "Hello, ${name}!"  # 输出:Hello, Alice!
echo "Hello, ${name}s!"  # 输出:Hello, Alices!

引用命令替换:
1、反引号(旧方法): 使用反引号 command 执行命令,并将命令的输出赋值给变量,示例:

current_date=`date` #执行date命令输出当前日期,并赋值给变量 current_date
echo "Current date is $current_date" #输出日期

2、$() 语法(新方法): 使用 $() 语法进行命令替换,更加清晰和易读,示例:

current_date=$(date) #执行date命令输出当前日期,并赋值给变量 current_date
echo "Current date is $current_date" #输出日期

位置参数变量: 让 Shell 脚本程序更好地满足用户的一些实时需求,以便灵活完成工作,必须要让脚本程序能够像之前执行命令时那样,接收用户输入的参数。
  例如 $0 对应的是当前 Shell 脚本程序的名称,$1、$2、$3……$N 则分别对应着第1、第2、第3…第N 个位置的参数值。

./test.sh arg1 arg2 arg3 arg4

./test.sh 脚本内容:
#!/bin/bash
echo "$1 $2 $3 $4"

输出结果:arg1 arg2 arg3 arg4

预定义变量: Shell中有一些预定义的特殊变量,如下:
  $# 表示参数个数。
  $? 表示上一命令的退出状态。
  $$ 表示当前Shell进程ID。
  $@ 和 $* 表示记录所有的参数值【从 $1 开始记录】,不包含 $0
  ${!n} 表示第n个参数。
  ${!#} 表示最后一个参数。
示例:

echo "Number of arguments: $#"
echo "Exit status: $?"
echo "Process ID: $$"
echo "all arguments: $@"

变量的作用域:
1、全局变量: 在Shell脚本中定义的变量默认是全局变量,在整个脚本中都可用。
2、局部变量: 使用 local 关键字可以定义局部变量,其作用域仅限于函数内部,示例:

my_function() {
  local my_local_variable="I am local"
  echo $my_local_variable
}
my_function

示例脚本: 以下是一个完整的示例Shell脚本,展示了变量的定义、规则和使用方式:

#!/bin/bash

# 定义字符串变量
greeting="Hello, World!"

# 输出变量
echo $greeting

# 读取用户输入
echo "Enter your name:"
read user_name
echo "Hello, $user_name!"

# 定义只读变量
readonly pi=3.14
echo "The value of pi is $pi"

# 删除变量
unset greeting
echo "Greeting after unset: $greeting"

更多内容请参考 Shell 脚本专栏。
 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Darrich

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值