Linux Bash(二)
Shell 的变量功能
Bash 中的变量不仅仅是“数据存储”,
它还影响着系统运行、命令行为、用户环境等方方面面。
2.1 什么是变量?
变量(Variable)是用来存储数据值的名字,
通过名字引用其内容,而不是直接使用数值。
Shell 变量与程序语言的区别:
Shell 中变量默认都是字符串类型;不需要提前声明类型;Bash 会在使用时自动解释。
查看变量:
echo $变量名
2.2 变量的使用与设置
(1)显示变量内容
echo $PATH
echo $USER
(2)设置变量规则
规则 示例
变量名区分大小写 A=1 与 a=1 不同
“=” 两边不能有空格 name=Tom name = Tom
使用 $变量名 调用值 echo $name
双引号内可解析变量 "My name is $name"
单引号内不解析变量 'My name is $name'
反引号(cmd)或 $(cmd) 可执行命令替换 now=$(date)
(3)取消变量
unset 变量名
示例:
unset name
2.3 环境变量的功能
环境变量(Environment Variable)是对 整个系统或子进程都可见的变量。
普通变量只在当前 shell 生效。
普通变量 → 环境变量:
name="Tom"
export name
验证:
echo $name
bash # 开新 shell
echo $name # 子 Shell 中仍然存在
(1)常见环境变量
变量名 功能
PATH 可执行文件搜索路径(用冒号分隔)
HOME 当前用户家目录
SHELL 当前用户的 shell 类型
USER / LOGNAME 当前登录用户名
PWD 当前工作目录
LANG / LC_ALL 语系(locale)设置
PS1 主提示符(命令行前缀样式)
MAIL 邮件通知路径
(2)查看所有变量
命令 功能
set 显示所有变量(包含本地变量+环境变量+函数)
env 显示所有环境变量
export -p 显示当前导出的环境变量
(3)修改命令提示符 PS1
echo $PS1
# 默认:[user@hostname dir]$
PS1="[\u@\h \W]\$ "
转义符 含义
\u 用户名
\h 主机名
\w 当前路径
\W 当前目录名
\$ 超级用户显示 #,普通用户 $
(4)特殊变量 $ 与 ?
变量 含义
$ 当前 Shell 的 PID
? 上一条命令的退出状态码(0 为成功,非 0 为失败)
$0 当前脚本名
$# 参数个数
$1 $2 ... 第1、第2个参数
$@ / $* 所有参数列表
示例:
ls /not_exist
echo $?
# 输出非0,表示执行失败
2.4 语系变量
locale:影响显示结果,决定系统的语言、时间、货币等显示格式。
常见命令:
locale
locale -a # 查看系统支持的语言环境
常见变量:
LANG
LC_ALL
LC_TIME
LC_MESSAGES
2.5 变量的有效范围
类型 有效范围 设置方式
局部变量(local) 当前 shell 内有效 var=value
环境变量(global) 当前 shell + 子进程有效 export var=value
局部函数变量 仅在函数内部有效 local var=value
示例:
myfunc() {
local x=100
echo "Inside: $x"
}
echo $x # 不会显示
2.6 变量键盘读取、数组与声明
(1)键盘读取:read
read var
echo "You entered: $var"
常用选项:
选项 功能
-p 提示文字
-t 设置超时(秒)
-n 限制输入长度
-s 隐藏输入(常用于密码)
示例:
read -p "Enter name: " name
read -s -p "Password: " passwd
(2)数组(Array)
Bash 支持 一维数组(不支持多维)。
定义与使用:
arr=(one two three)
echo ${arr[0]} # one
echo ${arr[@]} # 输出全部元素
echo ${#arr[@]} # 元素数量
赋值与删除:
arr[3]="four"
unset arr[1]
(3)变量声明:declare 或 typeset
用法 功能
declare -i var 定义为整数
declare -r var 定义为只读
declare -a var 定义为数组
declare -x var 定义并导出为环境变量
declare -f 显示函数定义
declare -p var 显示变量属性和值
示例:
declare -i num=10
num=num+5
echo $num # 输出15
2.7 与文件系统及程序限制关系 — ulimit
ulimit 用于查看或限制 当前 Shell 会话 对系统资源的使用。
选项 功能
-a 显示所有限制
-f 限制可创建文件的最大大小
-t 限制 CPU 时间(秒)
-n 限制最大打开文件数
-u 限制最大进程数
示例:
ulimit -n
# 输出:1024
ulimit -n 2048
# 修改最大打开文件数
2.8 变量内容的删除、取代与替换(字符串操作)
Bash 内建丰富的字符串处理语法:
语法 功能 示例 结果
${var#pattern} 从前删除最短匹配 ${path#*/} 删除最前面的 /
${var##pattern} 从前删除最长匹配 ${path##*/} 取文件名
${var%pattern} 从后删除最短匹配 ${file%.txt} 删除扩展名
${var%%pattern} 从后删除最长匹配 ${url%%/*} 取主域名
${var/pattern/repl} 替换第一个匹配 ${name/foo/bar} 把 foo 换成 bar
${var//pattern/repl} 替换所有匹配 ${str// /_} 空格换成下划线
${#var} 获取长度 ${#str} 字符数
${var:-default} 若未定义则使用默认值 ${USER:-guest}