当前位置: 首页 > news >正文

shell编程笔记

变量定义

在 Shell 中,变量定义无需声明类型,直接赋值即可。变量名区分大小写,建议使用大写字母命名环境变量,小写字母命名局部变量。赋值时等号(=)两边不能有空格。

MY_VAR="Hello World"  # 定义变量
local_var=123         # 局部变量

变量引用

使用 $ 符号或 ${} 引用变量。${} 可以避免歧义,例如变量名与后续字符粘连时。

echo $MY_VAR       # 输出变量值
echo "Value: ${local_var}abc"  # 避免解析为 $local_varabc

特殊变量

Shell 提供一些特殊变量,用于脚本操作:

  • $0:脚本名称
  • $1, $2, …:脚本参数
  • $#:参数个数
  • $?:上一条命令的退出状态(0 表示成功)
  • $$:当前脚本的进程 ID
echo "Script name: $0"
echo "First argument: $1"
echo "Total arguments: $#"

环境变量

环境变量可用于所有子进程。使用 export 命令将变量提升为环境变量。

export PATH=$PATH:/usr/local/bin  # 追加路径到 PATH
env | grep PATH                   # 查看环境变量

变量操作

字符串操作
name="shell_script"
echo ${name:0:5}    # 截取前5个字符(输出 "shell")
echo ${name#shell}  # 删除前缀(输出 "_script")
echo ${name/_/-}    # 替换第一个 _ 为 -(输出 "shell-script")
默认值设置
unset var
echo ${var:-default}  # 若 var 未定义,输出 "default"
echo ${var:=default}  # 若 var 未定义,赋值并输出 "default"

数组定义与操作

Shell 支持一维数组,下标从 0 开始。

fruits=("apple" "banana" "cherry")
echo ${fruits[1]}       # 输出 "banana"
echo ${fruits[@]}       # 输出所有元素
echo ${#fruits[@]}      # 输出数组长度
fruits+=("orange")      # 追加元素

只读变量

使用 readonly 标记的变量不可修改。

readonly PI=3.14
PI=3.14159  # 报错:readonly variable

删除变量

使用 unset 删除变量,但无法删除只读变量。

unset MY_VAR  # 删除变量

命令替换

将命令输出赋值给变量,使用 $() 或反引号 `

current_date=$(date)
echo "Today is $current_date"

算术运算

使用 $(( )) 进行整数运算。

sum=$(( 5 + 3 * 2 ))
echo "Result: $sum"  # 输出 11

注意事项

  • 变量赋值时避免空格:var=value 正确,var = value 会报错。
  • 字符串赋值无需引号,但包含空格或特殊字符时需要引号。
  • 单引号(')不解析变量,双引号(")会解析变量。
http://www.xdnf.cn/news/728299.html

相关文章:

  • 预处理深入详解:预定义符号、宏、命名约定、命令行定义、条件编译、头文件的包含
  • 【大模型】情绪对话模型项目研发
  • C++继承与构造函数调用详解
  • flash写失败分析
  • Linux系统编程收尾(35)
  • 【C/C++】cmake实现Release版本禁用调试接口技巧
  • [定昌linux开发板]启用用户唯一性限制
  • Android全局网络监控最佳实践(Kotlin实现)
  • 从Java的Jvm的角度解释一下为什么String不可变?
  • Spring Boot3.4.1 集成redis
  • 自动过滤:用 AutoFilterer 实现高性能动态查询
  • 怎么从一台电脑拷贝已安装的所有python第三方库到另一台
  • 分库分表的常见策略
  • Arduino学习-跑马灯
  • day 26 函数专题
  • 基于云模型与TOPSIS评价算法的综合应用研究
  • 深度刨析树结构(从入门到入土讲解AVL树及红黑树的奥秘)
  • 深入理解Transformer架构:从原理到实践
  • python中 @注解 及内置注解 的使用方法总结以及完整示例
  • Jenkins 2.479.1安装和邮箱配置教程
  • SkyWalking如何实现跨线程Trace传递
  • 权威认证与质量保障:第三方检测在科技成果鉴定测试中的核心作用
  • 【C语言编译与链接】--翻译环境和运行环境,预处理,编译,汇编,链接
  • 怎么用外网打开内网的网址?如在异地在家连接访问公司局域网办公网站
  • DeepSeek 赋能数字人直播带货:技术革新重塑电商营销新生态
  • 处理知识库文件_编写powershell脚本文件_批量转换其他格式文件到pdf文件---人工智能工作笔记0249
  • Android 代码阅读环境搭建:VSCODE + SSH + CLANGD(详细版)
  • 生成式AI如何重塑设计思维与品牌创新?从工具到认知革命的跃迁
  • TCP通信与MQTT协议的关系
  • 使用ssh-audit扫描ssh过期加密算法配置