第一个shell脚本需确保shebang正确(推荐#!/usr/bin/env bash)、添加执行权限(如chmod 755 hello.sh)、换行符为lf;三者缺一不可,否则出现permission denied或no such file or directory等错误。

直接上手写第一个 Shell 脚本,关键不是语法多漂亮,而是让系统能认出它是脚本、有执行权限、且解释器路径写对——三者缺一不可。
脚本开头必须写 #!/bin/bash 吗?
不是“必须”,但强烈建议用 #!/bin/bash(或 #!/usr/bin/env bash)。省略它,系统会默认用 /bin/sh 执行,而 sh 不支持 [[、数组、大括号扩展等常见 bash 特性,极易报错 command not found 或行为异常。
推荐写法:
#!/usr/bin/env bash
比硬写 #!/bin/bash 更健壮,能自动查找环境里第一个 bash 可执行文件,适配 macOS、某些容器或自定义路径的 Linux 发行版。
为什么 ./hello.sh 提示 Permission denied?
因为脚本文件默认没有执行权限。Shell 不像 Python 那样靠 python hello.py 启动,而是靠内核直接加载可执行文件,所以权限位必须打开。
- 给当前用户加执行权限:
chmod u+x hello.sh - 更常用的是全权限(读+写+执行)对所有者:
chmod 755 hello.sh - 别用
chmod 777—— 这会让其他用户也能修改或执行,存在安全风险
验证是否生效:ls -l hello.sh 中应看到 -rwxr-xr-x(开头的 x 表示可执行)。
运行时提示 No such file or directory,但文件明明存在
这通常不是路径错了,而是换行符或解释器路径问题:
- 在 Windows 编辑器(如 Notepad++、VS Code 默认 CRLF)里保存的脚本,会带
\r\n换行;Linux 的bash把#!/bin/bash\r当成一个不存在的解释器路径,报错No such file or directory - 解决:用
dos2unix hello.sh转换,或在 VS Code 中点击右下角CRLF→ 切成LF - 另一个可能:
#!/bin/bash写成了#! /bin/bash(中间有空格),内核会忽略 shebang,退回到sh执行,也可能触发该错误
真正卡住新手的,往往不是语法,而是这三件事没做对:shebang 写对、权限加对、换行符干净。其它都是锦上添花。











