Shell Step by Step (2) —— Variable

本文介绍了Bash脚本中的变量声明与赋值方法,并详细解释了如何使用echo命令配合转义序列实现文本颜色的控制。同时,文章还提到了一些在实际应用中需要注意的问题,比如处理以-开头的文件名或变量值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.变量声明

readonly 只读
export 修改或打印环境变量
export -p 显示当前环境

强烈注意,在赋值的前后一定不要有空格.

# echo 控制字符颜色

root@kallen:/home/kallen/TEST/Shell# echo -e '\e[1;31mHello,World\e[0m
Hello,World
背景色: 0 透明(使用终端颜色), 40 黑, 41 红, 42 绿, 43 黄, 44 蓝 45 紫, 46 青绿,47白(灰)
前景色 :  30 黑 31 红, 32绿, 33 黄, 34 蓝, 35 紫, 36 青绿, 37 白(灰)
高亮度: 高亮是1,不高亮是0。注意m后面紧跟字符串。

-e 用来开启echo中的转义
\e 或 \033 来输出Esc符号
设置颜色的格式: \e[背景色;前景色;高亮m
恢复默认为 \e[0m
高亮是1,不高亮是0
注意m后面紧跟字符串

【注意】 以"-"开头的文件名在使用"-"作为重定向操作符的时候,可能会产生问题.
            应该写一个脚本来检查这个问题,并给这个文件加上合适的前缀.如: 
            ./-FILENAME, $PWD/-FILENAME,或$PATHNAME/-FILENAME.
如果变量的值以"-"开头,可能也会引起问题.
1 var="-n"
2 echo $var
3 # 具有"echo -n"的效果了,这样什么都不会输出的.


~+    当前工作目录,相当于$PWD 变量.
~-     之前的工作目录,相当于$OLDPWD 内部变量.
=~    用于正则表达式,这个操作将在正则表达式匹配部分讲解,只有version3 才支持.
^      行首,正则表达式中表示行首. "^"定位到行首.

变量赋值方式——

(1) 直接赋值:=
(2) Let赋值: let a=16+5

Bash 并不对变量区分"类型".本质上,Bash 变量都是字符串. 但是依赖于上下文,Bash 也允许比较操作和算术操作.
决定这些的关键因素就是,变量中的值是否只有数字.

a.位置参数

{}标记法是一种很好的使用位置参数的方法.这也需要间接引用
1 args=$# # 位置参数的个数
2 lastarg=${!args}
3 # 或: lastarg=${!#}
4 # 注意 lastarg=${!$#} 将报错

### 只读Shell环境变量的定义与使用 #### 定义只读环境变量 在Shell中,`readonly`命令用于将变量标记为只读。一旦某个变量被声明为只读,它的值就不能再被修改或删除[^1]。为了使该变量成为环境变量,还需要通过`export`命令将其导出到环境中。 以下是创建只读环境变量的具体过程: 1. **定义变量并赋初值** 首先定义一个普通的Shell变量,并为其赋予初始值。 2. **将变量设为只读** 使用`readonly`命令对该变量进行保护,防止后续对其值的任何更改尝试。 3. **导出为环境变量** 利用`export`命令将此变量提升至环境变量级别,使得子进程能够继承它。 示例代码如下: ```bash #!/bin/bash MY_VAR="This is a read-only environment variable" export MY_VAR readonly MY_VAR echo $MY_VAR ``` #### 设置方法注意事项 当试图对已经设定成只读状态下的变量重新分配新数值或者执行清除操作(`unset`)时,系统将会抛出错误提示表明这是不可变更的只读型态数据对象[^1]。 #### 使用场景分析 只读环境变量适用于那些在整个应用程序生命周期内都不应该发生变化的关键配置参数场合。例如,在部署大型分布式应用架构下,某些固定的网络端口号、数据库连接串或者是API密钥等敏感信息都可以考虑采用这种方式加以管理以增强系统的稳定性和安全性[^4]。 另外值得注意的是虽然我们讨论的重点在于“环境”层面的只读特性实现,但实际上无论是局部还是全局作用域内的任意种类别的shell变量均支持利用同样的机制施加类似的限制条件[^3]。 ### 示例演示 下面给出一段完整的脚本来展示整个流程以及验证效果: ```bash #!/bin/bash # Step 1: Define the variable with initial value. DB_HOST="localhost" # Step 2: Export it as an environmental variable so child processes can access it too. export DB_HOST # Step 3: Mark this variable as 'read only'. readonly DB_HOST # Print out current status of our newly created RO env var. echo "Database Host set to: $DB_HOST" # Attempting modification will fail now... DB_HOST="new-host.example.com" && echo "Modified successfully!" || echo "Modification failed due to being READ ONLY!" ``` 运行以上脚本后可以看到最后一步修改失败的信息输出,证明了我们的目标达成情况良好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值