作者:冰凌清泽_712 | 来源:互联网 | 2024-12-20 08:20
本文基于《鸟哥的Linux私房菜》一书,详细介绍了Shell脚本中变量的使用方法,包括变量的赋值规则、字符串处理技巧以及环境变量的管理等,旨在帮助读者更好地理解和使用Shell中的变量。
本文参考自《鸟哥的Linux私房菜》,旨在提供一个关于Shell脚本中变量使用的全面指南。
在Shell脚本编程中,变量是非常重要的组成部分。正确地管理和使用变量可以大大提高脚本的灵活性和功能性。
变量的使用
在Shell中,可以通过简单的命令来输出变量的值:
echo $variable
echo $PATH
echo ${PATH}
变量的赋值规则
1. 变量名和变量值之间通过等号(=)连接,例如:
myname=VBird
2. 等号两边不能有空格,否则会被视为命令的一部分,例如以下都是错误的:
myname = VBird
myname=VBird Tsai
3. 变量名只能包含字母和数字,且不能以数字开头,例如以下为错误示例:
2myname=VBird
4. 如果变量值中包含空格或其他特殊字符,可以使用双引号或单引号包围变量值。双引号内的特殊字符会保持其特殊含义,而单引号内的特殊字符则被视为普通字符。例如:
var="lang is $LANG" # 结果为 "lang is en_US"
var='lang is $LANG' # 结果为 "lang is $LANG"
5. 使用反斜杠(\)可以转义特殊字符,使其变为普通字符,例如:
var=\$special
6. 在命令中使用其他命令的输出结果时,可以使用反引号(`)或 $( ) 结构。例如获取内核版本:
version=$(uname -r)
echo $version # 可能输出 2.6.18-128.el5
7. 若要追加变量值,可以使用 "$变量" 或 ${变量},例如:
PATH="$PATH":/home/bin
8. 使用 export
命令可以使变量成为环境变量,从而在子进程中可用,例如:
export PATH
9. 通常大写字母用于表示系统预定义的变量,用户自定义的变量建议使用小写字母,以便区分。
10. 使用 unset
命令可以删除变量,例如:
unset myname
变量内容的处理
1. 删除变量内容的前缀或后缀:
path=${PATH}
echo ${path#/*kerberos/bin:} # 删除最短匹配前缀
echo ${path##/*:} # 删除最长匹配前缀
echo ${path%:*bin} # 删除最短匹配后缀
echo ${path%%:*bin} # 删除最长匹配后缀
2. 替换变量内容中的字符串:
echo ${path/sbin/SBIN} # 替换第一个匹配项
echo ${path//sbin/SBIN} # 替换所有匹配项
变量的测试与条件赋值
在脚本中,经常需要测试变量是否存在或是否为空,并根据测试结果进行不同的处理。例如:
echo $username # 如果未设置,可能为空
username=${username-root} # 若未设置,则赋值为 root
echo $username
username="vbird tsai"
username=${username-root} # 若已设置,则保持原值
echo $username
username=""
username=${username:-root} # 若为空或未设置,则赋值为 root
echo $username
以下是不同情况下的变量测试与赋值行为:
变量配置方式 | str 未设置 | str 为空字符串 | str 已设置非空字符串 |
var=${str-expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
var=${str=expr} | str=expr var=expr | str 不变 var= | str 不变 var=$str |
var=${str:=expr} | str=expr var=expr | str=expr var=expr | str 不变 var=$str |
var=${str?expr} | expr 输出至 stderr | var= | var=$str |
var=${str:?expr} | expr 输出至 stderr | expr 输出至 stderr | var=$str |