直接执行脚本文件
在日常使用Linux或macOS系统时,很多人会写一些小脚本来简化重复操作。比如你写了个备份文件的脚本 backup.sh,最直接的运行方式就是给它加上可执行权限,然后直接运行。
先通过 chmod 添加执行权限:
chmod +x backup.sh接着就可以像运行普通程序一样启动它:
./backup.sh这里的点斜杠表示当前目录,系统会根据脚本第一行的 shebang(如 #!/bin/bash)来决定用哪个解释器执行。
通过解释器调用脚本
如果你不想修改脚本权限,或者只是临时测试一段脚本内容,可以直接调用 shell 解释器来运行。比如使用 bash 命令加载脚本:
bash backup.sh这种方式不需要执行权限,适合调试阶段。即使脚本没有 x 权限,也能正常跑起来。很多新手在写完脚本后忘了加权限,用这种方法可以快速验证逻辑是否正确。
使用 source 或点号执行
有时候你需要让脚本在当前 shell 环境中运行,而不是开启一个子进程。这时候就得用 source 或者它的简写 .(一个点加空格)。
例如你写了个环境变量设置脚本 setup_env.sh,里面设置了 export PATH=$PATH:/my/tool。如果用 ./setup_env.sh 执行,变量只在子shell中生效,退出就没了。但用下面的方式:
source setup_env.sh或者
. setup_env.sh环境变量就会直接写入当前终端会话,后续命令都能用到。
从标准输入传递脚本
还有一种不太常见但很灵活的方式:把脚本内容通过管道传给 bash。比如你从网上复制了一段安装命令,不想保存成文件,可以直接运行:
echo '#!/bin/bash\necho "Hello from pipe"' | bash或者结合 curl 使用,常用于一键安装场景:
curl -s https://example.com/install.sh | bash这种做法方便是方便,但要注意安全风险,确保来源可信。
在脚本中嵌入执行逻辑
有些脚本本身设计成既能独立运行又能被其他脚本引用。这时可以在末尾加判断逻辑,比如:
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then\n main\nfi意思是只有当这个脚本是被直接运行时才调用 main 函数,否则只加载函数定义。这种技巧在写工具库时特别有用。
掌握这些不同的运行方式,能让你在不同场景下更灵活地使用 shell 脚本。无论是写自动化任务、部署服务还是配置开发环境,选对方法能让事情变得更顺手。