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

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.lryc.cn/news/2393186.html

相关文章:

  • 鸿蒙仓颉开发语言实战教程:自定义组件
  • 基于Spring Boot+Vue 网上书城管理系统设计与实现(源码+文档+部署讲解)
  • opencvsharp usb摄像头录像 c# H264编码
  • ch12 课堂参考代码 及 题目参考思路
  • uniapp 实现腾讯云 IM 消息已读回执
  • JavaScript 性能优化按层次逐步分析
  • 三分钟打通Stable Diffusion提示词(附实战手册)
  • 【Linux网络篇】:初步理解应用层协议以及何为序列化和反序列化
  • RK3588 Opencv-ffmpeg-rkmpp-rkrga编译与测试
  • 特伦斯 S75 电钢琴:奏响极致音乐体验的华丽乐章
  • 硬件学习笔记--64 MCU的ARM核架构发展及特点
  • div或button一些好看实用的 CSS 样式示例
  • USB充电检测仪-2.USB充电检测仪硬件设计
  • 如何查询服务器的端口号
  • AU6815集成音频DSP的2x25W数字型ClaSS D音频功率放大器(替代TAS5805)
  • DeepSeek R1开源模型的技术突破与AI产业格局的重构
  • 打破认知壁垒重构科技驱动美好生活 大模型义务传播计划
  • 【Web应用】 Java + Vue 前后端开发中的Cookie、Token 和 Swagger介绍
  • 本地部署AI工作流
  • 什么是VR全景相机?如何选择VR全景相机?
  • 如何创建和使用汇编语言,以及下载编译汇编软件(Notepad++,NASM的安装)
  • c++设计模式-单例模式
  • Ubuntu开机自动运行Docker容器中的Qt UI程序
  • Python训练营打卡Day40(2025.5.30)
  • SpringBoot+vue+SSE+Nginx实现消息实时推送
  • python中使用高并发分布式队列库celery的那些坑
  • 哈工大计算机系统大作业 程序人生-Hello’s P2P
  • 计算机一次取数过程分析
  • Halcon联合QT ROI绘制
  • 力扣面试150题--二叉树的右视图