首页 > 系统相关 >shell脚本实例分析1

shell脚本实例分析1

时间:2022-10-08 22:10:13浏览次数:49  
标签:脚本 fork shell exec PID sh echo source 实例


1、
#!/bin/ksh
#name:testdir
echo $0
program=`basename $0`
program_dir=`dirname $0`
echo "program= $program"
echo "program_dir=$program_dir"

if [ `echo "$0"|grep -c "/" ` -gt 0 ] ; then
        cd ${0%/*}
fi

#如果文件名中有"/",则去掉最后的文件名字进入目录中

pwd

解析:
在这里,由于这是一个脚本文件,我需要执行这个文件,运行./testdir 。我得到结果program=testdir program_dir=.
pwd=home/npp/a/b/c。
由此可知,$0 接收到的是当前的文件名,我将当前目录pwd改为home/npp时,运行 ./a/b/c/test.dir 得到的结果是program=teatdir program_dir=./a/b/c
命令功能:
$0 表示输入的文件名字,
pwd 显示当前目录,
basename提取所给路径的最后一项,一般用来提取文件名,
dirname 显示除了最后一项的其他项,一般用来显示路径 ,
grep -c 只输出匹配行的计数
-gt 大于
${0%/*} 将第一个输入参数即脚本本身名字中的后缀/XXX删掉,
 相当于dirname

 

2、

#!/bin/ksh
#name:1.sh
A=B
echo "\n\n\nPID for 1.sh before exec/source/fork:$$"
export A
echo "1.sh:\$A is $A"
case $1 in
    exec)
        echo "using exec..."
        exec ./2.sh;;
    source)
        echo "using source..."
        . ./2.sh;;
    *)
        echo "using fork by default..."
        ./2.sh;;
esac
echo "PID for 1.sh after exec/source/fork:$$"
echo "1.sh:\$A is $A"
echo "\n\n\n"

#!/bin/bash
#name:2.sh
echo "PID for 2.sh:$$"
echo "2.sh get \$A=$A from 1.sh"
A=C
export A
echo "2.sh:\$A is $A"

运行命令:./1.sh fork
运行结果:
PID for 1.sh before exec/source/fork:9638
1.sh:$A is B
using fork by default...
PID for 2.sh:9640
2.sh get $A=B from 1.sh
2.sh:$A is C
PID for 1.sh after exec/source/fork:9638
1.sh:$A is B

运行命令:./1.sh exec
运行结果:
PID for 1.sh before exec/source/fork:10330
1.sh:$A is B
using exec...
PID for 2.sh:10330
2.sh get $A=B from 1.sh
2.sh:$A is C

运行命令:./1.sh source
运行结果:
PID for 1.sh before exec/source/fork:11149
1.sh:$A is B
using source...
PID for 2.sh:11149
2.sh get $A=B from 1.sh
2.sh:$A is C
PID for 1.sh after exec/source/fork:11149
1.sh:$A is C

解析:由结果可知,source 调用新脚本是在当前行程中进行的,当新脚本中的变量值改变时,当前行程中的值也会改变,新脚本结束时,回到当期脚本继续运行   . ./2.sh
fork 是在一个新的子行程中进行的,子行程结束回到父行程,子行程中的变量改变不影响父行程中的值  ./2.sh
exec 调用新脚本结束当前脚本,在当前行程中进行,新脚本结束时,程序结束。  调用方法  exec ./2.sh
$$ 当前进程ID




标签:脚本,fork,shell,exec,PID,sh,echo,source,实例
From: https://blog.51cto.com/u_15812342/5738725

相关文章

  • Docker方式快速启动一个Redis实例
    安装Redis有多种方式,除了可以通过各个平台的软件包工具安装外,还可以直接从源码安装。但是,安装Redis可能会遇到一些这样的问题,比如:1.网络环境比较差,下载耗时比较长2.从源......
  • Shell脚本实现自动化安装
    在Linux环境下,实现多个软件包的自动化安装步骤:1、找到软件包,提取软件包的名字建立解压路径(为了让我们更清楚的找到我们的文件)pkg=`find${PACKAGE_PATH}-name*BIN*.tar.gz......
  • 此系统上禁止运行脚本 问题
    参考https://blog.csdn.net/qq_34516746/article/details/123615008  win10 使用管理员打开powershell敲入以下命令后,输入Yset-executionpolicyremotesigned......
  • 方法引用符、引用类方法、引用对象的实例方法、引用类的实例方法及引用构造器
    目录​​一、方法引用符​​​​二、引用类方法​​​​三、引用对象的实例方法​​​​四、引用类的实例方法​​​​五、引用构造器​​一、方法引用符方法引用符: :: 该......
  • [shell] 如何用gcm找到文件(一个菜鸡的搞笑故事)
    开始学shellShell的种类多样,我们甚至可以直接在上面编程,例如bashshell例如windowspowershell(我简写为wpsh)Argument间要用空格隔开以下指令如果不分类的话那么指在wpsh......
  • PowerShell
    PowerShell在管理员权限下调整执行策略远程执行ps脚本两个要求:远程主机身份经过验证,为可信任主机为满足第一个要求,远端主机必须经过域服务器验证。最佳应对方法时将......
  • xshell7 无法打开 提示"要继续使用此程序,您必须应用最新的更新或使用新版本" 解决方
    情况打开xshell7提示要继续使用此程序,您必须应用最新的更新或使用新版本解决方案临时方案-重置时间大法重装xshell(但是也得导出之前的配置)更换shell工具-MobaXte......
  • 过采样系列4:实例介绍(终篇)
    这应该是过采样系列的最后一篇文章,经常有同学在使用FPGA、单片机或者DSP进行过采样时没有正确设计代码,导致结果异常,有些结果看似正常,而实际却没有意义。这篇文章涉及到简单......
  • Linux 简单的Java sh脚本启动jar包
    123projectName="你的项目名"45#提醒功能6help(){7echo"help:sh${projectName}.sh[start|stop|restart]"8exit19}1011#判断项......
  • shell 运算符
    shell中的比较运算符:-eq    //等于-ne    //不等于-gt    //大于(greater)-lt     //小于 (less)-ge    //大于等于-le  ......