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

shell变量进阶

1. Shell 位置参数变量

部分位置参数变量如下:

  1. $0,获取当前执行的 Shell 脚本的文件名,如果执行脚本包含了路径,那么就包括脚本路径。

  2. $n,获取当前执行的 Shell 脚本的第n个参数值。如果n大于9,则用大括号括起来,例如${10},接的参数以空格隔开。

  3. $#,获取当前执行的 Shell 脚本后面接的参数数量

  4. $*,获取当前 Shell 脚本所有传参的参数,不加引号和$@相同;如果给$*加上双引号,例如:"$*",则表示将所有的参数视为单个字符串,相当于$1 $2 $3

  5. $@,获取当前 Shell 脚本所有传参的参数,不加引号和$*相同;如果给$@加上双引号,例如:$@,则表示将所有的参数视为不同的独立字符串,相当于"$1"、"$2"、"$3"...,这是将多参数传递给其他程序的最佳方式,因为它会保留所有的内嵌在每个参数里的任何空白。

示例1:showargs.sh 内容如下

[lyk@controller bin 14:55:49]$ vim showargs.sh​1 #!/bin/bash2 echo $0  3 echo $1  4 echo $2  5 echo $10 6 echo ${10}7 echo $#  8 echo $*  9 echo $@  10 echo "$@"   [lyk@controller ~ 13:56:39]$ bash showargs.sh {a..z}showargs.shaba0j26a b c d e f g h i j k l m n o p q r s t u v w x y za b c d e f g h i j k l m n o p q r s t u v w x y za b c d e f g h i j k l m n o p q r s t u v w x y z​

示例2:ssh_ctl 内容如下

[lyk@controller bin 14:59:40]$ vim ssh_ctl1 #!/bin/bash2 systemctl $1 sshd                                                                                         

执行使用绝对路径:

[lyk@controller bin 15:04:23]$ sudo ~/bin/ssh_ctl status● sshd.service - OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: active (running) since 三 2025-08-20 09:23:49 CST; 5h 41min ago......​[lyk@controller bin 15:05:02]$ sudo ~/bin/ssh_ctl stop[lyk@controller bin 15:05:06]$ sudo ~/bin/ssh_ctl status● sshd.service - OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: inactive (dead) since 三 2025-08-20 15:05:06 CST; 6s ago......​[lyk@controller bin 15:05:12]$ sudo ~/bin/ssh_ctl restart[lyk@controller bin 15:05:15]$ sudo ~/bin/ssh_ctl status● sshd.service - OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: active (running) since 三 2025-08-20 15:05:15 CST; 5s ago......

2. Shell 内置变量命令

echo

echo命令参数选项:

  • -n,不换行输出内容。

  • -e,解析转义字符(见下面的字符)

转义字符:

  • \n,换行。

  • \t,制表符(tab)。

  • \b,退格。

[lyk@controller bin 15:05:21]$ echo -n "lyk ";echo laowanglyk laowang[lyk@controller bin 15:08:48]$ echo -e "lyk\nlaowang"lyklaowang[lyk@controller bin 15:08:54]$ echo -e "lyk\tlaowang"lyk laowang[lyk@controller bin 15:09:00]$ echo -e "1\b23"23[lyk@controller bin 15:09:06]$ echo -e "123\b"123​# 后面有东西才会覆盖[lyk@controller bin 15:09:10]$ echo -ne "123\b";echo haha12haha​
​echo -e "123\b" 1. 输出 123,光标在 3 右侧2. \b 使光标左移到 3 左侧3. 无后续字符,3 未被覆盖 显示 123  \b 后无新字符,光标移动但原有字符保留,没有覆盖效果echo -e "1\b23" 1. 输出 1,光标在 1 右侧2. \b 使光标左移到 1 左侧3. 输出 23,2 覆盖 1,3 紧随其后  显示 23   \b 后有新字符,新字符从光标位置(原 1 的位置)开始覆盖,导致原有字符被替换

read

[lyk@controller bin 15:16:18]$ cat read.sh #!/bin/shread -p "输入你想要说的话:" strecho "你想要说的话是:$str"​[lyk@controller bin 15:16:22]$ bash read.sh 输入你想要说的话:aaa你想要说的话是:aaa​# 不显示输入的内容[lyk@controller bin 15:16:39]$ read -s -p "请设置用户密码: " password 请设置用户密码: [lyk@controller bin 15:17:04]$  echo $password123

3. Shell 变量子串介绍

  • ${parameter},返回变量 parameter 的内容。

  • ${#parameter},返回变内容的长度(按字符),也适用于特殊变量。

  • ......

  • ${parameter/pattem/string},使用string代替第一个匹配的pattern。

  • ${parameter//pattem/string},使用string代替所有匹配的pattern。

示例1: ${parameter}

[lyk@controller bin 15:17:19]$ str="abc123abc123"[lyk@controller bin 15:29:09]$ echo ${str}abc123abc123

示例2:${#parameter}

[lyk@controller bin 15:29:55]$ echo ${#str}12

示例{3..5}......

示例6:${parameter/pattem/string}

[lyk@controller bin 15:30:12]$ str="abc123abc123"
#只替换第一个
[lyk@controller bin 15:31:21]$ echo ${str/abc/def}
def123abc123

示例7:${parameter//pattem/string}

[lyk@controller bin 15:31:42]$ str="abc123abc123"
#替换全部
[lyk@controller bin 15:31:56]$ echo ${str//abc/def}
def123def123

3.1 变量子串的生产场景应用案例

示例1:替换文件名中特定字符串

[lyk@controller bin 15:35:11]$ touch stu-202212-snap.jpg
[lyk@controller bin 15:35:20]$ ls stu-*
stu-202212-snap.jpg
[lyk@controller bin 15:35:24]$ file="stu-202212-snap.jpg"
[lyk@controller bin 15:35:30]$ mv $file ${file/2022/2021}
[lyk@controller bin 15:35:36]$ ls stu-*
stu-202112-snap.jpg

示例2:删除文件名中特定字符串

[lyk@controller bin 15:36:46]$ touch stu-202212-snap.jpg
[lyk@controller bin 15:36:50]$ ls stu-*
stu-202212-snap.jpg
[lyk@controller bin 15:36:52]$ file="stu-202212-snap.jpg"
[lyk@controller bin 15:36:56]$ mv $file ${file/-snap/}
[lyk@controller bin 15:37:01]$ ls stu-*
stu-202212.jpg

http://www.dtcms.com/a/340354.html

相关文章:

  • 基于51单片机自动浇花1602液晶显示设计
  • Ubuntu-安装Epics Archiver Appliance教程
  • 玳瑁的嵌入式日记D21-08020(数据结构)
  • 服务器内存条不识别及服务器内存位置图
  • 认识Node.js及其与 Nginx 前端项目区别
  • 动手学深度学习(pytorch版):第五章节—多层感知机(1)层和块
  • 从异构计算视角审视ARM与FPGA:架构融合驱动智能时代计算范式革新
  • mybatis xml中表名 字段报红解决
  • S32K328(Arm Cortex-M7)适配CmBacktrace错误追踪
  • 生产电路板的公司有哪些?国内生产电路板的公司
  • 05-网关服务开发指南
  • 从零实现自定义顺序表:万字详解 + 完整源码 + 图文分析
  • 虚幻引擎目录结构
  • MYSQL-增删查改CRUD
  • Protobuf
  • AIStarter服务器版深度解析:与桌面版对比,解锁云端AI开发新体
  • STM32F4 外扩SRAM介绍及应用
  • word——如何给封面、目录、摘要、正文设置不同的页码
  • Web网站的运行原理1
  • 使用 mongosh 设置 MongoDB 账号密码
  • word——快速删除页眉横线
  • 微软宣布开源大模型gpt-oss在Azure平台实现性能突破
  • Azure 使用记录
  • Claude Code NPM 包发布命令
  • 【Linux系统】匿名管道以及进程池的简单实现
  • 测试环境搭建和部署(在Linux环境下搭建jdk+Tomcat+mysql环境和项目包的部署)
  • 暖哇科技AI调查智能体上线,引领保险调查风控智能化升级
  • cv2.bitwise_and是 OpenCV 中用于执行按位与运算的核心函数,主要用于图像处理中的像素级操作
  • 【密码学实战】X86、ARM、RISC-V 全量指令集与密码加速技术全景解析
  • 【考研408数据结构-09】 图论进阶:最短路径与最小生成树