简单的shell脚本及运行


文章目录

  • 简单的shell脚本及运行
  • 1.输出hello shell的脚本
  • 2.脚本的运行
  • 3.which&/etc/shells
  • 4.接收用户的输入数据
  • 5.运行shell脚本的方式详解
  • - 在新进程中运行shell脚本
  • - 在当前进程中运行shell脚本
  • 6.source命令


1.输出hello shell的脚本

vim 01.sh			#写一个脚本(文件名必须以.sh结尾)

脚本内容:

#!/bin/bash 		#指定shell程序的解释器
echo "hello shell!" #这是一条输出语句

2.脚本的运行

运行方式不只有单一的一种 根据个人不同的习惯来使用

sh 01.sh
. 01.sh
source 01.sh
/bin/sh 01.sh

shell脚本运行dockercompose shell 脚本运行_数据

3.which&/etc/shells

which命令:查找sh命令的完整路径
具体功能:

which命令用于查找并显示给定命令的绝对路径, 环境变量$PATH中保存了查找命令时需要遍历的目录。
which指令会在环境变量 $PATH设置的目录里查找符合条件的文件。 使用which命令,就可以看到某个系统命令是否存在,
以及执行的到底是哪一个位置的命令。

shell脚本运行dockercompose shell 脚本运行_bash_02


/etc/shells:一个有效登陆shell的列表

可以查看可以使用的shell解释器

shell脚本运行dockercompose shell 脚本运行_bash_03

4.接收用户的输入数据

read命令来从标准输入中读取用户输入的数据
$(占位符)表示变量

#!/bin/bash
# 从终端读取用户输入的数据 并赋值给preson变量
# read命令来从标准输入中读取用户输入的数据
echo "What is your name ?"
read preson
echo "hello, $preson"

shell脚本运行dockercompose shell 脚本运行_shell脚本_04

5.运行shell脚本的方式详解

运行 Shell 脚本有两种方法:一种在新进程中运行,一种是在当前 Shell 进程中运行

- 在新进程中运行shell脚本

  • 将shell脚本作为程序运行
chmod +x 01.sh		#增加执行权限
./01.sh
  • shell脚本作为参数传递为bash解释器
    注意:通过这种方式运行脚本,不需要在脚本文件的第一行指定解释器信息。就算指定了也不会起作用
/bin/bash 01.sh		# 切换到01.sh所在的目录 使用bash的绝对路径

更简洁的方法是运行bash命令
bash是一个外部命令,shell会在/bin目录下找到对应的应用程序,即/bin/bash

which bash
bash 01.sh
  • 检测是否开启了新进程
    linux中每个进程都有一个唯一的ID,称为PID,使用$$变量就可以获取当前进程的PID

写脚本文件:

vim chech.sh
#!/bin/bash
echo $$

执行:

chmod +x check.sh
./check.sh			#新进程的PID
echo $$				#当前进程PID
/bin/bash check.sh	#新进程的PID

shell脚本运行dockercompose shell 脚本运行_bash_05


进程的PID不一样,当然就是两个进程了

- 在当前进程中运行shell脚本

soucre命令
source命令的用法: source filename
也可以简写为 . filename

使用source命令不用给脚本增加执行权限
如何判断是不是新进程,查看脚本文件运行后的进程的pid和当前terminal的pid就可以
在shell中,可以使用$$变量获取当前进程的pid

source check.sh

当前进程的pid

echo $$

shell脚本运行dockercompose shell 脚本运行_bash_06


两个进程的PID一样,是在当前进程中运行shell脚本

6.source命令

使用source或 . 可以将自身脚本中的 变量值或函数等的返回值传递到当前父shell脚本中使用

写脚本:

vim 03.sh
#!/bin/bash
userdir=`pwd`

执行:

sh 03.sh
echo $userdir

source 03.sh
echo $userdir

shell脚本运行dockercompose shell 脚本运行_shell脚本_07


所以我们可以得到结论:

子shell脚本会继承父shell脚本的变量、函数等,反之则不可以(就像孩子随父亲姓,但父亲的姓并不取决于孩子)

如果希望反过来继承(父shell继承子shell),就要用source命令