Shell脚本(待扩展)

本文深入探讨了Shell脚本的编写与执行方式,包括脚本头部声明、执行命令、调用其他脚本的方法(fork、exec、source),以及环境变量的传递。通过示例脚本super.sh和subShell.sh,演示了不同调用方式的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shell脚本

Shell脚本编写

脚本文件编写时一般在文件开头添加(#! /bin/bash or #! /bin/sh)并独处一行,而后开始脚本编写;

#代表注释,但是和!组合#!用来声明解释脚本的程序;可以根据脚本执行方式的不同,选择开头写与不写


Shell脚本执行方式

Shell脚本执行大体有三种执行方式(script-name均是带有路径):

  • bash/sh script-name
  • source/. script-name
  • script-name

bash/sh script-name

使用此种方式执行脚本,可以选择在脚本中不声明解释程序,因为外部指明解释程序


soruce/. script-name

此处使用.执行脚本时,必须添加路径,否则会报相应的错误


script-name

直接使用脚本名字执行,文件执行用户必须是可执行的,可以通过chmod增加可执行权限


注:

  • 第一种和第三种方式都会在当前Shell进程外启动子Shell进程,可以在Shell脚本中echo $$打印进程ID可知
  • 一般建议在脚本头行声明解释程序,而且在脚本执行时指定解释程序,避免执行漏写等问题

Shell脚本文件中调用其他脚本执行

从一个脚本中调用另外脚本执行有三种方式,fork, exec, source

CommandExplanation
fork由名知义,新开一个子Shell进程,子Shell继承父进程环境变量,但不能将自己的环境变量传递给父Shell
exec在同一个Shell进程中执行,但父脚本exec命令之后的内容不会再被执行
source在同一个Shell进程中执行,相当于两个脚本合并成一个脚本,相应环境变量可以相互取用
super.sh
#! /bin/bash
x=10
y=20
if [ $x -gt $y ]
then
    echo "x is greater than y"
else
    echo "y is greater than x"
fi
echo $$

# 测试调用执行子脚本方式fork, exec,source
A=1
# Mark each name to be passed to child processes in the environment
export -p A

case $1 in
    "exec")
        echo -e "==> using exec ..."
        exec ./subShell.sh;;
    "source")
        echo -e "==> using source ..."
        source ./subShell.sh;;
    *)
        echo -e "==> using fork for default ..."
        ./subShell.sh;;
esac        

echo -e "in super script variable A = $A\n"        
复制代码

subShell.sh
#! /bin/bash

echo "PID for subShell = $$"
echo "In subShell script get variable A = $A from super script(super.sh)"

A=2
export A
echo -e "in subShell.sh variable A = $A"
复制代码

注:相应的执行脚本在文件夹内可以查询,执行结果如图:

转载于:https://juejin.im/post/5cd3e95de51d453afa02895e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值