1、Shell的第一个程序
- 1.1 新建一个文本文件,并命名为 test.sh。
sh是后缀名,只是便于识别这是shell脚本文件,牢记这个跟window文件后缀是有本质区别的。Linux系统运行文件是看它是否有权限,而不是看格式。例如,文件名去掉后缀,重名成test,也是可以的。只是不便于你识别这是shell文件
[root@VM_0_6_centos ~]# touch test.sh
- 1.2 编写文件内容
第一行代码是指定代码解释器1来执行代码,#!是约定标记[root@VM_0_6_centos ~]# vim test.sh # 编写test.sh中的文件内容 1 #! /bin/bash 2 #跟世界说Hello world 3 4 echo "Hello world"
第二行代码是注释
2、执行Shell脚本
-
2.1新开线程执行脚本
```powershell [root@VM_0_6_centos ~]# ./test.sh #linux系统中,执行一个文件是看它是否x执行权限,跟window系统有很大区别,window系统是有文件格式的exe、bat等等 Hello world [root@VM_0_6_centos ~]# test.sh bash: test.sh: command not found [root@VM_0_6_centos ~]# /bin/bash test.sh #指定解释器运行脚本,这种方式不需要脚本第一行指定解释器 Hello world [root@VM_0_6_centos ~]# bash test.sh #指定解释器运行脚本,这种方式不需要脚本第一行指定解释器 Hello world ``` 肯定有人疑惑第一条命令多了./,如果少了这个相对路径,Shell会认为是命令,然后去PATH变量中的路径寻找程序,最后会出现命令找不到,请看第二条命令执行的例子。 那为何说这个是新开进程来执行的?我们都知道一个进程对应一个PID。那我们写一个Shell脚本,查看当前运行的PID #! /bin/bash #查看当前运行进程的PID echo $$ ```powershell #新建一个Shell脚本,输出当前进程PID,然后执行 #Shell脚本,文件名checkPID [root@VM_0_6_centos ~]# ./checkPID 26417 [root@VM_0_6_centos ~]# ./checkPID 26418 [root@VM_0_6_centos ~]# echo $$ 9740 [root@VM_0_6_centos ~]# echo $$ 9740 ``` 从上可以发现,每次脚本执行都不一样。并且跟当前运行的Shell(PID=9740)进程PID不一样。
-
2.2 在当前线程执行脚本
source 命令会强制读取文件,依次执行脚本文件中的全部命令,而忽略脚本文件的权限。
```powershell [root@VM_0_6_centos ~]# source test.sh Hello world ``` 简写“.” ```powershell [root@VM_0_6_centos ~]# . test.sh Hello world ```
Shell是解释型语言 ↩︎