news 2026/5/28 9:23:04

【Linux—Shell脚本编程从入门到精通】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux—Shell脚本编程从入门到精通】

目录

一、shell基础概念

二、Shell 脚本编写步骤

三、Shell 变量操作

四、Shell 引号规则(重点)

五、字符串操作

六、Shell 预定义变量(内置特殊变量)

七、算术运算(expr)

九、流程控制语句


一、shell基础概念

shell:用户和内核之间沟通的桥梁,既是命令行解释器,又是脚本编程语言

定义与作用:shell负责接收用户输入的命令,翻译成内核看得懂的指令,并执行操作,提供文本界面,让系统通过命令跟用户沟通

分类:

内置命令如cd,echo,pwd无需调用外部程序,直接由解释器执行

外置命令Is grep查找调用对应的可执行程序

二、Shell 脚本编写步骤

1.创建脚本文件 vi xxx.sh 2.提升文件权限 chmod 777 xxx.sh 3.执行该文件 ./xxx.sh

三、Shell 变量操作

1.定义变量:不需要加类型,直接写变量名

a=10 b=20 echo $a $b

2.输入变量:read 变量

read a b //80 90 echo $a $b //80 90

3.取消变量的定义:unset 变量

shell命令,逐行编译

read a //80 read b //90 unset b //80 echo $a $b

4.设置为只读模式:readonly

只读之后无法取消定义,无法修改值

四、Shell 引号规则(重点)

“ ”中的内容,命令解释器会查找之中的变量值,但是如果和字符串结合,需要用{}将变量名括起来

' '中的内容,会直接将其看作字符串输出,无论其中是否有正确的变量

name=123 echo "${name}456" //123456 echo '${name}456' //${name}456 echo '$name456' //$name456 echo "$name456" //输出:空(无任何内容) //双引号中,Shell会尝试解析$name456这个“变量名”,如果 $ 后面的字符无法组成 “合法且已定义的变量名”,Shell 会把整个 $xxx 当作普通字符串输出(相当于没识别到变量)。

五、字符串操作

  • 打印字符串(变量)长度:在变量名前加#,且要将带#的整个变量名用{}括起来

  • 按位置截取:${变量名:起始位置:长度} 从起始位置后截长度

  • 按位置截取:${变量名:起始位置} 从起始位置后截到末尾

  • 按位置截取:${变量名:空格负数} 从倒数的第{负数绝对值}的位置开始时截取到末尾

  • 按位置截取${变量名:(负数)} 从倒数的第{负数绝对值}的位置开始时截取到末尾

    str="hello world" echo $str //hello world echo ${#str} //11 (字符串长度) echo ${str:6:5} //world echo ${str:6} //world echo ${str:-5} //world echo ${str:(-5)} //world

六、Shell 预定义变量(内置特殊变量)

Shell 的位置参数 / 特殊内置变量,核心作用是:

  1. 接收运行脚本时传入的外部参数;

  2. 获取脚本 / 进程的基础信息(名称、PID 等)。

echo $0 /1.sh //打印当前脚本命令名称 echo $1 //$1-9外部命令的1-9参数 echo $2 echo $@ //打印所有的外部参数(除了第0个) echo $$ 3309 //打印当前进程ID号 echo $# 0 //打印当前所有外部参数的个数(除了第0个)

七、算术运算(expr)

算数语句 expr

1.算术运算符

expr是用于表达式计算的命令,支持整数运算和字符串处理。

注意:运算符与操作数之间必须空格,否则会被视为字符串。

运算 示例(a=10, b=4) 结果 加法 expr $a + $b 14 减法 expr $a - $b 6 乘法 expr $a \* $b 40 除法 expr $a / $b 2 取余 expr $a % $b 2

变量赋值与输出:

可以将expr的计算结果赋值给变量,再输出变量值:

sum=$(expr $a % $b) echo $sum sum=$a echo $sum # 输出变量a的值

2.关系运算符

用于比较两个数值,返回真 / 假。

运算符 含义 格式示例 -eq 等于 (==) test $a -eq $b -ne 不等于 (!=) test $a -ne $b -gt 大于 (>) test $a -gt $b -ge 大于等于 (>=) test $a -ge $b -lt 小于 (<) test $a -lt $b -le 小于等于 (<=) test $a -le $b -a 逻辑与 (and) test 条件1 -a 条件2 -o 逻辑或 (or) test 条件1 -o 条件2

3.文件运算符

运算符 含义 格式示例 -b 判断是否为块设备文件 test -b 文件名 -x 判断文件是否可执行 test -x 文件名 -w 判断文件是否可写 test -w 文件名 -r 判断文件是否可读 test -r 文件名 -e 判断文件是否存在 test -e 文件名 -f 判断文件是否为普通文件 test -f 文件名 -d 判断文件是否为目录文件 test -d 文件名 -ot 判断文件 1 是否比文件 2 旧 test 文件1 -ot 文件2 -nt 判断文件 1 是否比文件 2 新 test 文件1 -nt 文件2

用于检查文件类型和属性。

等价写法test 条件[ 条件 ]是等价的,用于检查文件类型和比较数值。

九、流程控制语句

  1. 基础 if 结构

    if 测试语句 then 语句1 fi
  2. if-else 结构

    if 测试语句 then 语句1 else 语句2 fi
  3. if-elif-else 结构

    if 测试语句1 then 语句1 elif 测试语句2 then 语句2 else 语句3 fi
  4. while语句结构(条件满足进入循环)

    while 测试语句 ​ do ​ 代码 ​ done
  5. until语句结构(条件满足退出循环)

    until 测试语句 ​ do ​ 代码 ​ done
  6. for语句结构

    for 变量 in 参数(列表)

    do

    代码

    done

  7. 示例:

for a in {100..90} do echo $a done
for a in `ls` do if test -f $a//判断是否是文件 then echo $a fi if test -d $a//判断是否是目录 then echo $a!!! fi echo $a done
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 9:20:44

3分钟掌握SketchUp STL插件:让3D打印设计从此无忧

3分钟掌握SketchUp STL插件&#xff1a;让3D打印设计从此无忧 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 你是否曾因Sket…

作者头像 李华
网站建设 2026/5/28 9:19:31

项目DNA技术:让AI编程助手生成符合项目规范的代码

1. 项目DNA技术&#xff1a;如何让AI助手不再写出“外星代码”如果你和我一样&#xff0c;日常重度依赖 Cursor、Claude 或者 GitHub Copilot 这类 AI 编程助手&#xff0c;那你一定对下面这个场景深恶痛绝&#xff1a;AI 生成的代码&#xff0c;单看每一行都能跑通&#xff0c…

作者头像 李华
网站建设 2026/5/28 9:17:23

Kubernetes持续监控与告警管理:构建实时的监控体系

Kubernetes持续监控与告警管理&#xff1a;构建实时的监控体系 一、监控概述 Kubernetes监控是保障集群稳定性的关键&#xff0c;涉及指标收集、可视化展示和告警通知。 1.1 监控架构 ┌─────────────────────────────────────────…

作者头像 李华