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

【Linux shell】shell中的变量——构建脚本逻辑的基石


目录

系统变量

自定义变量

只读变量

数组变量

特殊变量


 

🔥个人主页 🔥

😈所属专栏😈 

系统变量

系统变量是 Linux 系统预定义的全局变量,用于存储与系统环境、用户会话相关的关键信息

变量名作用描述示例值
$PATH命令搜索路径,多个路径用冒号分隔/usr/bin:/bin:/usr/sbin
$HOME当前用户的主目录/home/username
$USER当前登录的用户名username
$SHELL当前使用的 Shell 程序路径/bin/bash
$PWD当前工作目录/home/username/projects
$OLDPWD上一次的工作目录(cd - 命令会使用)/home/username/Documents

1.当前用户的主目录 echo $HOME

echo $HOME

2.当前工作目录 echo $PWD

echo $PWD

3.当前使用的 Shell 程序路径 echo $SHELL

 echo $PWD

3.当前登录的用户名 echo $USER

 echo $USER

 

3.命令搜索路径,多个路径用冒号分隔echo $PATH(系统终端可执行命令的位置,对应bashrc中的export PATH)

 echo $PATH

自定义变量

  • 变量与值中间不能有空格
  • 使用$+变量名访问对应变量的值,例如$a
  • 变量后值默认是字符串
  • 若变量的值有空格,应该用引号包围
  • unset撤销变量的值班
a=3
echo $a

 

a=3
unset a
echo $a

a="hello world"
echo $a

只读变量

语法:readonly 变量(只能读,不能修改)

readonly PI=3.14
echo $PI

 错误:不能修改只读变量

readonly PI=3.14
PI = 2
echo $PI

数组变量

语法:数组名=(元素1,元素2,元素3)

  • 用法1:访问数组中的元素 ,访问第n个元素${数组名[n]}
  • 用法2:输出数组中的元素 ,${数组名[@]}
  • 用法3:输出数组中的元素个数 ,${#数组名[@]}
fruits=("apple" "banana" "cherry")
echo "第二个元素: ${fruits[1]}"  
echo "所有元素: ${fruits[@]}"   
echo "元素个数: ${#fruits[@]}"   
echo $0

特殊变量

变量含义
$0脚本或 Shell 本身的名称
$1-$9脚本的第 1 到 9 个参数,${10} 表示第 10 个参数
$#参数的数量
$*所有参数(作为单个字符串)
$@所有参数(作为独立字符串)
$?上一个命令的退出状态码(0 = 成功,非 0 = 失败)
$$当前 Shell 进程的 PID
$!最后一个后台进程的 PID

 1.$0 为脚本名称

echo $0

2.$1 ,$2 为脚本的第一个参数第二个参数,以此类推

echo "$0 $1 $2"

3.$#参数的数量

echo $#

4.$@所有参数(作为独立字符串),$*所有参数(作为单个字符串)

echo "$@ $*" 

5.$?上一个命令的退出状态码(0 = 成功,非 0 = 失败)

b=hello world
echo $?

非0执行失败,因为有空格时未加引号

b="hello world"
echo $?

 返回0说明执行成功

http://www.xdnf.cn/news/12652.html

相关文章:

  • 水利工程流速监测中的雷达流速仪
  • FreeRTOS事件组-笔记
  • 33、原子操作
  • C++常用的自动化测试库
  • PostgreSQL数据类型使用
  • 【生活】程序员防猝si指南
  • java_网络服务相关_gateway_nacos_feign区别联系
  • JAVA-springboot log日志
  • 打卡46天
  • DDPM优化目标公式推导
  • JAVA国际版二手交易系统手机回收好物回收发布闲置商品系统源码支持APP+H5
  • 每日算法刷题Day25 6.7:leetcode二分答案3道题,用时1h40min(遇到两道动态规划和贪心时间较长)
  • 【Go语言基础【15】】数组:固定长度的连续存储结构
  • FreeRTOS任务之深入篇
  • ps蒙版介绍
  • Mac软件卸载指南,简单易懂!
  • MySQL复杂SQL(多表联查/子查询)详细讲解
  • 程序代码篇---Python串口
  • Vibe Coding AI编程
  • 安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
  • nginx日志的一点理解
  • Nginx 事件驱动理解
  • LeetCode 118 杨辉三角 (Java)
  • 移动应用开发专业核心课程以及就业方向
  • QT使用AES加解密,openssl及QCA问题记录
  • OpenLayers 从后端服务加载 GeoJSON 数据
  • Windows 下搭建 Zephyr 开发环境
  • Linux 文件系统与 I/O 编程核心原理及实践笔记
  • 【科研绘图系列】R语言绘制论文组图(multiple plots)
  • BERT, GPT, Transformer之间的关系