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}



posted on 2025-12-13 15:39  ljbguanli  阅读(10)  评论(0)    收藏  举报