bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考。 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。...现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。...方法二:以绝对路径的方式去执行bash shell脚本: /data/shell/hello.sh 方法三:直接使用bash 或sh 来执行bash shell脚本: cd /data/shell bash...方法四:在当前的shell环境中执行bash shell脚本: cd /data/shell . hello.sh 或 cd /data/shell source hello.sh 前三种方法执行shell...[root@localhost ~]# pwd /root 注意:用以上三种方法执行shell脚本,现行的shell会开启一个子shell环境,去执行shell脚本,前两种必须要有执行权限才能够执行。
下面的小代码要演示的问题是,可以规定某个Python程序必须放在特定的文件夹(代码中假设必须放到Python安装目录中)中才能运行,移动到其他文件夹之后会拒绝运行。
在windows使用WSL后,安装了Ubuntu操作系统,在Ubuntu系统中执行npm时候提示如下:
/bin/bash # 脚本名:kill_process.sh # 脚本功能:强制杀死进程 方式kill -9 # 1通过ps查询进程的id # 2使用kill -9 强制终止进程...请使用此方式运行:/bin/bash kill_process.sh 进程名” exit 1 fi # 获取要被杀死的进程名 pName=$1 <<! ...” exit 1;; esac 测试: # 终端后台启动两次延时命令 sleep 200 & sleep 200 & # 启动脚本 /bin/bash kill_process.sh...sleep 或 /bin/bash kill_process.sh “sleep 200” 执行结果: 将要被终止的进程有: —————————————————————— python 13583...vi ~/.bash_profile # 最后一行添加 my_kill=”/bin/bash 脚本路径” 保存后执行source ~/.bash_profile使立即生效 之后只要我们在当前用户下就可以使用命令
运行脚本,结果如下: /bin/sh: NAME: This variable is read only. 4、 局部变量 Shell 中默认定义的变量是全局变量,可以使用 global 进行显式声明,...运行上述脚本,返回数字 1 到 5,然后终止。...另外,还有几个特殊字符用来处理参数: $# 传递到脚本或函数的参数个数 $* 以一个单字符串显示所有向脚本传递的参数 $$ 脚本运行的当前进程ID号 $!...var=$[$a + $b] echo "a + b : $val" 注意: 乘号(*)前边必须加反斜杠()才能实现乘法运算; $((表达式)) 此处表达式中的 "*" 不需要转义符号 ""。...该命令对变量进行两次扫描。
问题 僵尸进程 僵尸进程是指完成执行(通过exit系统调用,或运行时发生致命错误或收到终止信号所致),但在操作系统进程表中仍然有一个表项,处于“终止状态”的进程。...为避免产生僵尸进程,实际应用中一般采取的方式是: 将父进程中对SIGCHLD信号的处理函数设置SIG_IGN fork两次并杀死一级自进程,令二级子进程成为孤儿进程而被init所“收养”、清理 与docker...假设容器中跑一个Web服务器,这个服务器运行bash编写的CGI脚本,脚本中调用了grep。Web服务器发现脚本执行超时,杀掉了它,但是grep进程没有受到影响并继续运行。...解决办法 bash 是否已经有现成,流行的软件可以做到这一点呢?还真有,这就是bash。bash会正确地reap收养的子进程。bash可以执行任何程序。...对bash发送一个SIGTERM信号,bash会终止,但是并不会发送SIGTERM给其子进程。 当bash程序终止时,内核会停止整个容器和其中的进程。一些进程会接收到SIGKILL信号,不正确地终止。
停止进程 9 SIGKILL 无条件终止进程 15 SIGTERM 尽可能终止进程 …… 默认情况下,bash shell会忽略收到的任何SIGOUT(3)和SIGTERM(15...但是这样可以在不终止进程的情况下能深入脚本内部一窥究竟。 Ctrl+z 会生成一个SIGTSTP信号,停止shell中运行的任何进程。...如果在同一个目录运行两次,第二次会追加到nohup.out。 16.4 作业控制 重启停止的进程需要向其发送一个SIGCONT信号。.../test > test.txt & 注意:必须将nice命令和要启动的命令放在同一行。...anacron不会处理执行时间需求小于一天的脚本 16.6.3 使用新的shell启动脚本 如果每次运行脚本的时候都能够启动一个新的bash shell,将会非常的方便。
set -o xtrace 四、Bash 的错误处理 如果脚本里面有运行失败的命令(返回值非0),Bash 默认会继续执行后面的命令。 #!...$ bash script.sh script.sh:行3: foo: 未找到命令 bar 可以看到,Bash 只是显示有错误,并没有终止执行。 这种行为很不利于脚本安全和除错。...set -e从根本上解决了这个问题,它使得脚本只要发生错误,就终止执行。 #!/usr/bin/env bash set -e foo echo bar 执行结果如下。...$ bash script.sh script.sh:行4: foo: 未找到命令 可以看到,第4行执行失败以后,脚本就终止执行了。 set -e根据返回值来判断,一个命令是否运行失败。...还有一种方法是使用command || true,使得该命令即使执行失败,脚本也不会终止执行。 #!
set -o xtrace 四、Bash的错误处理 如果脚本里面有运行失败的命令(返回值非0),Bash 默认会继续执行后面的命令。 #!...$ bash script.sh script.sh:行3: foo: 未找到命令 bar 可以看到,Bash 只是显示有错误,并没有终止执行。 这种行为很不利于脚本安全和除错。...set -e从根本上解决了这个问题,它使得脚本只要发生错误,就终止执行。 #!/usr/bin/env bash set -e foo echo bar 执行结果如下。...$ bash script.sh script.sh:行4: foo: 未找到命令 可以看到,第4行执行失败以后,脚本就终止执行了。 set -e根据返回值来判断,一个命令是否运行失败。...还有一种方法是使用command || true,使得该命令即使执行失败,脚本也不会终止执行。 #!
Shell中文意思叫做“壳”,在计算机中它是和用户直接交互的一个界面,而我们通常用到的是文本界面的shell: bash启动的时候会运行各种不同的脚本。...特殊变量:具有特殊功能的变量 $# 表示传递到脚本的参数列表 $* 以一个字符串显示所有向脚本传递的参数,跟位置变量不同的是这里参数可超过9个。 $$ 表示当前运行脚本的进程ID号 $!...9、如果函数保存在其他文件中,必须通过 source 或者 dot 命令把它们装入当前脚本。 10、函数可以递归,且其递归次数没有限制。...7、陷阱信号 当程序运行时,按下 Control-C 或者 Control-/后程序就立刻终止,但很多时候当不希望信号到达时程序就立刻停止运行,而是希望忽略这个信号继续运行下去或者在程序退出前做些清除操作...trap ‘trap 2’ 2 表示用户必须按两次 Control-C 才能终止程序,其中第一个陷阱捕捉信号,第二个复位信号默认动作为杀死进程。
当你签退后,shell也终止了。 2.非交互式shell shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。...当它读到文件的结尾,shell也就终止了。 ---- 什么是shell脚本 把在命令行执行的命令放在一个文件里统一执行,称为Shell脚本 包含若干个linux命令、循环语句,条件语句等。...---- shell脚本规范 1.目录统一 2.shell脚本的结尾要以.sh结尾 3.脚本的开头需要有解释器 #!/bin/bash 4.脚本中需要有作者信息 #!.../bin/bash #Author: _DriverZeng_ #Date: _1999-12-21_ #Name: _Print Message_ 5.必须要加注释(开发规范,运维规范...) 6....和 source 都是在父shell下执行的 sh , bash , 相对路径 , 绝对路径都是在子shell下执行的 开发语言中程序代码的分类 编译型 写完后,需要编译才能运行。
注意:当你运行一个Docker容器时,镜像的ENTRYPOINT就是你的根进程,即PID 1(如果你没有ENTRYPOINT,那么CMD就会作为根进程,你可能配置了一个shell脚本,或其他的可执行程序...把Bash当作PID 1呢? 每个基础镜像都有这个是Bash 。Bash 正确地收割了采用的子进程。Bash 可以运行任何东西。...换句话说,给 Bash发送SIGTERM信号终止时,会等待十秒钟,然后被内核强制终止包含所有进程的整个容器。这些进程通过 SIGKILL 信号不正常地终止。...SIGKILL是特权信号,无法被捕获,因此进程无法干净地终止。假设服务正在运行的应用程序正忙于写入文件;如果应用程序在写入过程中不干净地终止,文件可能会损坏。不干净的终止是不好的。...向子进程发送信号是不够的:init 进程还必须等待子进程终止,然后才能终止自己。如果 init 进程过早终止,那么所有子进程都会被内核不干净地终止。
用户计算机的环境不相同,可能导致软件无法运行。 要使软件运行正确,用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。 那么怎么才能解决这个大问题呢?...下面的命令则启动一个 bash 终端,允许用户进行交互。...启动已终止容器 如果使用了 -d 参数运行容器。...终止容器 可以使用 docker container stop 来终止一个运行中的容器。 此外,当 Docker 容器中指定的应用终结时,容器也自动终止。...此外,docker container restart 命令会将一个运行态的容器终止,然后再重新启动它。 进入容器 在使用 -d 参数时,容器启动后会进入后台。
用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。...举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。 如果某些老旧的模块与当前环境不兼容,那就麻烦了。...它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。...$ docker container run -it ubuntu bash 对于那些不会自动终止的容器,必须使用docker container kill 命令手动终止。...(1)docker container start 前面的docker container run命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。
每当执行 npm run,就会自动新建一个 Shell,在这个 Shell 里面执行指定的脚本命令。因此,只要是 Shell(一般是 Bash)可以运行的命令,就可以写在 npm 脚本里面。...脚本在 shell 中运行,取决于平台。...,即必须包含 package.json 和入口脚本 bin。...错误处理 如果脚本里面有运行失败的命令(返回值非0),Bash 默认会继续执行后面的命令(只是显示有错误,并没有终止执行)。 这种行为很不利于脚本安全和除错。...屏幕只显示运行结果,没有其他内容) set -e:使得脚本只要发生错误,就终止执行(彻底解决上述「错误处理」;不适用于管道命令) set -o:只要一个子命令失败,整个管道命令就失败,脚本就会终止执行
255 正常范围外的退出码 但是,我们编写时即使捕获到了异常输出,当然脚本运行错误也会有对应的异常报错,我们却难以一一捕获他们。...found 4 + echo good good 3-终止命令 上面的例子不难发现,即使脚本发生错误,shell 也并不会立即终止: export PS4='$LINENO + ' $ bash -x...我们同样可以利用bash 的参数-e,它使得脚本只要发生错误,就终止执行: $ bash -xe script.sh 1 + a=3 2 + b=4 3 + c script.sh: line 3:...c: command not found 如果我们希望在脚本中内置这种找错或终止的语句,可以使用set 命令。...比如: set -e command 1 set +e command1 command2 set -e 就可以让1,2 位置的命令可以在运行失败的情况下,使脚本继续运行。
Shell必须在系统中找到对应命令名的可执行文件,才能正确执行。我们可以用绝对路径来告诉Shell可执行文件所在的位置。...此时,用户必须更换文件权限,或者以其他身份登录,才能执行脚本。当脚本运行时,两行命令将按照由上至下的顺序依次执行。...因此,function关键字并不是必须的。上面的脚本等效于: #!...another_output.file 在上面的脚本中,进行了两次函数调用。.../bin/bash while true do date sleep 1 done 语法while的终止条件是一个逻辑判断。
领取专属 10元无门槛券
手把手带您无忧上云