0

0

LinuxShell脚本执行流程_调试与排错说明【指导】

冷漠man

冷漠man

发布时间:2026-01-01 18:23:02

|

548人浏览过

|

来源于php中文网

原创

“command not found”主因是PATH不含当前目录或缺少执行权限;需chmod +x并用./运行;shebang应优先用#!/usr/bin/env bash;注意等号无空格、避免Windows换行符、子shell不继承变量。

linuxshell脚本执行流程_调试与排错说明【指导】

脚本执行时直接报错“command not found”

这通常不是语法问题,而是 PATH 没包含当前目录,或脚本没加执行权限。Linux 默认不把 .(当前目录)加入 PATH,所以不能直接敲 myscript.sh 运行。

  • 确认权限:chmod +x myscript.sh,否则即使有 shebang 也执行不了
  • 运行方式优先用 ./myscript.sh,而非 myscript.sh
  • 如果用了 #!/bin/bash 但系统实际是 /usr/bin/bash,可能报错;可用 #!/usr/bin/env bash 更兼容
  • 检查 shebang 行末是否混入 Windows 换行符(^M),用 dos2unix myscript.shsed -i 's/\r$//' myscript.sh 清理

变量未生效或值为空,但看起来写对了

Bash 中变量赋值等号两侧**不能有空格**,且子 shell 不继承父 shell 变量——这是最常被忽略的根源。

  • 错误写法:FOO = "bar" → 正确是 FOO="bar"
  • 管道会创建子 shell:echo "a b" | while read x; do echo $x; done 中的 $x 在循环外不可见;改用 while read x; do ...; done 或重定向避免
  • 导出变量需显式 export VAR,否则 source. 加载的脚本里定义的变量不会传给后续命令
  • 引用变量建议统一用 "$VAR",避免空格或通配符引发意外分词

用 set -x 调试却看不懂输出

set -x(或 bash -x script.sh)会打印每条执行前的展开结果,但容易混淆“原始语句”和“实际执行内容”。

Kacha
Kacha

KaCha是一款革命性的AI写真工具,用AI技术将照片变成杰作!

下载
  • 在脚本开头加 set -x,结尾加 set +x 控制范围;不要全脚本开启
  • 注意引号影响:比如 echo "$HOME/*"echo $HOME/* 展开后完全不同,set -x 显示的是后者已 glob 展开的结果
  • 调试函数时,set -x 会显示函数名+参数,但不会显示函数内局部变量(除非手动 declare -p
  • 临时加 echo "DEBUG: var=$VAR" 比纯 set -x 更精准,尤其涉及复杂字符串拼接或条件分支时

if 判断总走错分支,[ ] 和 [[ ]] 混用出问题

[ ] 是 POSIX 兼容的外部命令(常为 /bin/[),而 [[ ]] 是 Bash 内建关键字,行为差异大,混用极易翻车。

  • [ $VAR = "val" ] 中若 $VAR 为空,实际变成 [ = "val" ] → 语法错误;必须写成 [ "$VAR" = "val" ]
  • [[ $VAR =~ ^[0-9]+$ ]] 支持正则,但 [ ] 不支持;[[ ]]=~ 左侧变量无需引号,右侧模式也不能加引号
  • [[ ]] 支持 ==(等价于 =)和通配符匹配,[ ] 只认 = 且不支持通配符
  • 跨 shell 移植性要求高时用 [ ],但务必加引号;仅 Bash 环境下推荐统一用 [[ ]] 并关闭 set -o nounset 配合防御性检查
#!/bin/bash
set -euo pipefail
# -e:任一命令失败即退出;-u:引用未定义变量报错;-o pipefail:管道中任一环节失败整个管道失败
# 这三者组合能暴露多数隐性错误,比单靠 set -x 更早发现问题

真正卡住的往往不是语法,而是子 shell 边界、变量作用域、以及不同 test 形式对空值/特殊字符的容忍度——这些地方不打日志、不看展开结果,光读代码根本看不出问题。

相关专题

更多
while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

81

2023.09.25

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

517

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1054

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

749

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

420

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2343

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

769

2023.08.10

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

1480

2023.08.28

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.4万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号