Shell脚本变量#
变量是Shell脚本中用于存储数据的容器。本教程将介绍Shell脚本中变量的定义、使用和操作方法。
变量的定义#
在Shell脚本中,变量的定义非常简单,不需要声明类型,直接赋值即可。
#!/bin/bash
# 定义变量
name="John"
age=30
pi=3.14159
# 输出变量
echo "Name: $name"
echo "Age: $age"
echo "Pi: $pi"变量命名规则#
- 变量名只能包含字母、数字和下划线
- 变量名不能以数字开头
- 变量名区分大小写
- 变量名最好使用有意义的名称
变量的使用#
基本使用#
使用$符号引用变量的值。
#!/bin/bash
# 定义变量
fruit="apple"
# 使用变量
echo "I like $fruit"
# 变量作为命令参数
echo "The length of '$fruit' is ${#fruit}"花括号的使用#
当变量名与其他字符连在一起时,使用花括号{}来明确变量的边界。
#!/bin/bash
# 定义变量
name="Tom"
# 错误的用法(会将name1当作一个新变量)
echo "Hello $name1"
# 正确的用法
echo "Hello ${name}1"变量的赋值#
直接赋值#
#!/bin/bash
# 直接赋值
variable="value"命令替换#
使用反引号`或$()将命令的输出赋值给变量。
#!/bin/bash
# 使用反引号
current_date=`date`
echo "Current date: $current_date"
# 使用$()(推荐)
current_time=$(date +"%H:%M:%S")
echo "Current time: $current_time"
# 命令替换作为参数
file_count=$(ls -l | wc -l)
echo "File count: $file_count"读取输入赋值#
使用read命令读取用户输入并赋值给变量。
#!/bin/bash
# 读取输入
read -p "Enter your name: " name
echo "Hello, $name!"
# 读取多个值
read -p "Enter your name and age: " name age
echo "Name: $name, Age: $age"变量的类型#
Shell脚本中的变量都是字符串类型,但可以进行数值运算。
数值变量#
#!/bin/bash
# 数值变量
num1=10
num2=5
# 数值运算
sum=$((num1 + num2))
difference=$((num1 - num2))
product=$((num1 * num2))
quotient=$((num1 / num2))
remainder=$((num1 % num2))
echo "Sum: $sum"
echo "Difference: $difference"
echo "Product: $product"
echo "Quotient: $quotient"
echo "Remainder: $remainder"字符串变量#
#!/bin/bash
# 字符串变量
string1="Hello"
string2="World"
# 字符串拼接
combined="$string1 $string2"
echo "Combined: $combined"
# 字符串长度
length=${#string1}
echo "Length of string1: $length"
# 字符串截取
substring=${string1:1:3}
echo "Substring: $substring"环境变量#
环境变量是在整个系统中可见的变量,通常用于配置系统行为。
常用环境变量#
| 环境变量 | 描述 |
|---|---|
| HOME | 用户的主目录 |
| PATH | 命令搜索路径 |
| USER | 当前用户名 |
| SHELL | 当前使用的Shell |
| PWD | 当前工作目录 |
| LANG | 语言设置 |
| TERM | 终端类型 |
查看环境变量#
#!/bin/bash
# 查看所有环境变量
env
# 查看特定环境变量
echo "HOME: $HOME"
echo "PATH: $PATH"
echo "USER: $USER"设置环境变量#
#!/bin/bash
# 设置临时环境变量
export MY_VARIABLE="my value"
# 在脚本中使用
echo "MY_VARIABLE: $MY_VARIABLE"
# 永久设置环境变量(需要修改配置文件)
# echo 'export MY_VARIABLE="my value"' >> ~/.bashrc
# source ~/.bashrc特殊变量#
Shell脚本中有一些特殊变量,用于存储命令行参数和其他信息。
| 特殊变量 | 描述 |
|---|---|
| $0 | 脚本的名称 |
| $1, $2, … | 命令行参数 |
| $# | 命令行参数的数量 |
| $* | 所有命令行参数(作为单个字符串) |
| $@ | 所有命令行参数(作为单独的字符串) |
| $? | 上一个命令的退出状态码 |
| $$ | 当前进程的PID |
| $! | 上一个后台命令的PID |
#!/bin/bash
echo "Script name: $0"
echo "Number of arguments: $#"
echo "First argument: $1"
echo "Second argument: $2"
echo "All arguments (as single string): $*"
echo "All arguments (as separate strings): $@"
# 测试退出状态码
echo "Testing exit status..."
ls non_existent_file
echo "Exit status: $?"变量的作用域#
局部变量#
在函数内部定义的变量,只在函数内部有效。
#!/bin/bash
# 全局变量
global_var="global"
# 定义函数
my_function() {
# 局部变量
local local_var="local"
echo "Inside function: global_var=$global_var, local_var=$local_var"
# 修改全局变量
global_var="modified global"
}
# 调用函数
my_function
echo "Outside function: global_var=$global_var"
echo "Outside function: local_var=$local_var" # 会输出空值全局变量#
在函数外部定义的变量,在整个脚本中都有效。
变量的操作#
变量替换#
#!/bin/bash
# 变量替换
variable="Hello World"
# 替换第一个匹配项
echo "${variable/World/Universe}"
# 替换所有匹配项
echo "${variable//o/O}"
# 替换开头的匹配项
echo "${variable/#Hello/Hi}"
# 替换结尾的匹配项
echo "${variable/%World/Everyone}"变量默认值#
#!/bin/bash
# 定义变量
var1="value1"
# 如果变量存在则使用其值,否则使用默认值
echo "var1: ${var1:-default}"
echo "var2: ${var2:-default}"
# 如果变量不存在则使用默认值并设置变量
echo "var3: ${var3:=new value}"
echo "var3 now: $var3"
# 如果变量存在则使用默认值,否则报错
echo "var4: ${var4:?variable not set}"变量的删除#
使用unset命令删除变量。
#!/bin/bash
# 定义变量
variable="value"
echo "Before unset: variable=$variable"
# 删除变量
unset variable
echo "After unset: variable=$variable" # 会输出空值示例脚本#
个人信息脚本#
#!/bin/bash
# 个人信息脚本
echo "=== Personal Information ==="
# 读取用户输入
read -p "Enter your name: " name
read -p "Enter your age: " age
read -p "Enter your city: " city
# 输出信息
echo ""
echo "Name: $name"
echo "Age: $age"
echo "City: $city"
echo ""
echo "Hello, $name! You are $age years old and live in $city."系统信息脚本#
#!/bin/bash
# 系统信息脚本
echo "=== System Information ==="
# 获取系统信息
hostname=$(hostname)
ok=$(uname -o)
kernel=$(uname -r)
arch=$(uname -m)
# 获取内存信息
mem_total=$(free -h | grep Mem: | awk '{print $2}')
mem_used=$(free -h | grep Mem: | awk '{print $3}')
# 获取磁盘信息
disk_total=$(df -h / | tail -1 | awk '{print $2}')
disk_used=$(df -h / | tail -1 | awk '{print $3}')
disk_percent=$(df -h / | tail -1 | awk '{print $5}')
# 输出信息
echo "Hostname: $hostname"
echo "OS: $ok"
echo "Kernel: $kernel"
echo "Architecture: $arch"
echo "Memory: $mem_used of $mem_total"
echo "Disk: $disk_used of $disk_total ($disk_percent)"总结#
本教程介绍了Shell脚本中变量的基本概念和使用方法,包括:
- 变量的定义和命名规则
- 变量的使用和花括号的使用
- 变量的赋值方法(直接赋值、命令替换、读取输入)
- 变量的类型(数值变量、字符串变量)
- 环境变量和特殊变量
- 变量的作用域(局部变量、全局变量)
- 变量的操作(替换、默认值)
- 变量的删除
通过这些知识,你已经可以在Shell脚本中灵活使用变量了。在接下来的教程中,我们将学习Shell脚本的控制结构和函数。