Linux怎么写Shell脚本_Linux如何编写bash自动化脚本【教程】

雨婷大大_2962

雨婷大大_2962

2026-03-30

960人浏览

原创

应根据脚本实际语法特性选择:若使用[[、$(())、数组、进程替换等bash特有功能,必须用#!/bin/bash;若仅用posix标准语法(如[、$((...))),则优先用#!/bin/sh以保证跨平台兼容性。

linux怎么写shell脚本_linux如何编写bash自动化脚本【教程】

怎么判断一个脚本该用 #!/bin/bash 还是 #!/bin/sh

脚本第一行的 shebang 决定了执行器,不是随便写的。用错会导致语法报错或行为不一致,尤其在 Alpine、Debian 或 CI 环境里常见。

实际选法看内容:bash 支持数组、[[、source 参数扩展、进程替换等;sh 只保证 POSIX 兼容,连 echo -n 都可能失效。

  • 用了 [[、$(())、declare -a、for ((i=0; i → 必须用 <code>#!/bin/bash
  • 只用 [、case、while read、简单变量赋值 → #!/bin/sh 更安全,尤其部署到容器或嵌入式系统时
  • /bin/sh 在不同系统可能指向 dash(Ubuntu)、ash(Alpine)或 bash(macOS),别假设它支持 bash 特性

读取用户输入时,read 怎么避免空格截断和换行丢失

read 默认按 IFS(空格/制表/换行)切分字段,直接 read var 会吃掉开头结尾空格,多词输入只存第一个词。

正确写法是加 -r 和引号,且明确指定 IFS:

  • 读一行完整内容(含空格、反斜杠):IFS= read -r line
  • 读多个字段但保留各自空格:IFS='|' read -r field1 field2(用 | 分隔)
  • 从文件逐行处理时,别写 cat file | while read line —— 管道会开子 shell,循环外变量失效;改用 while IFS= read -r line; do ... done

if 判断文件存在或非空,为什么 [ -f $file ] 常出错

变量未引号包裹 + 路径含空格/特殊字符 = 直接报 [: too many arguments 或静默失败。这不是语法问题,是 word splitting 导致的。

  • 永远用 [ -f "$file" ],双引号不能省;$file 为空时,[ -f ] 会变成测试字符串 -f 是否非空,结果恒真
  • 检查文件非空:[ -s "$file" ](比 [ -n "$(cat $file)" ] 安全,后者会因权限失败而报错)
  • 判断命令是否成功,别依赖 if [ $? -eq 0 ] —— 直接 if cmd; then 更干净,也避免 $? 被中间 echo 覆盖

脚本里调用外部命令,路径和环境变量为什么总不生效

Shell 脚本默认不继承你的交互式 shell 的 PATH 或 alias,也不加载 ~/.bashrc。CI 或 crontab 下更明显。

  • 别写 python script.py,先查真实路径:command -v python,或用绝对路径 /usr/bin/python3
  • 需要自定义 PATH?在脚本开头加 export PATH="/opt/mytools:$PATH",但注意:crontab 中默认 PATH 很窄(通常只有 /usr/bin:/bin)
  • alias 不会在脚本中展开,必须用完整命令;函数可以定义,但别指望它自动加载 ~/.bash_functions —— 要手动 source

真正麻烦的是跨环境一致性:同一段脚本在本地能跑,放到 GitHub Actions Ubuntu runner 就缺命令,或者 Alpine 镜像里没有 gawk。写之前先确认目标环境的基础工具集,比事后 debug 省三倍时间。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3890

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3333

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2473

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5990

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

5622

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3313

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2805

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3039

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

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

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习