第四课 shell脚本的建立和执行
1. Shell脚本(bash shell程序)通常是在编辑器(如vi/vim)中编写,由unix/linux命令、bash shell命令、程序结构控制语句和注释等内容组成。
2. 一个规范的shell 脚本的第一行会指出由哪个程序(解释器)来执行脚本中的内容,在linux bash编程中一般为:
#!/bin/bash
或
#!/bin/sh
“#!” 又称作幻数,在执行bash脚本的时候,内核会根据它来确定该用哪个程序来解释脚本中的内容,这一行必须在脚本顶端的第一行,如果不是第一行则为注释。
第五课 shell脚本的执行
1. 当shell脚本以3交互的 方式运行时,它会先查找环境标量ENV,该变量指定了一个环境变量文件(通常是.bashrc),然后从该环境变量文件开始执行,当读取了ENV文件后,SHELL才开始执行shell 脚本中的内容。
Shell脚本的执行可以采用以下三种方式:
(1)bash script-name 或 sh script-name (推荐使用)
(2)path/script-name 或 ./script-name(当前路径下执行脚本)
(3)source script-name 或 . script-name #注意 “.”后边有空格
第一种方法是当脚本文件本身没有可执行权限(即文件x位为-号)时常使用的方法,推荐的使用方法。
第三种方法通常是使用source或者”.”点号读入或加载指定的shell 脚本文件(san.shll),然后,依次执行指定shell 脚本文件san.sh中的所有语句。这些语句将作为当前父shell脚本father.sh进程的一部分运行。因此,使用source或者”.”点号可以将san.sh自身脚本中的变量的值或者函数等的返回值传递给当前的父shell脚本father.sh中使用。这是第三种方法和前两种方法最大的区别。
第三种执行方法特殊之处例子演示。
当前的命令行窗口是一个shell,test.sh是另一个shell。用sh 等方法执行脚本中定义了变量dir。但是dir是test.sh的局部变量,不能将dir局部变量传到当前命令行的shell中。所以在当前命令行中echo $dir为空。
但是,用”.” 或者source来执行脚本时,就会把脚本中的变量传到父脚本中来,父脚本可以引用到。
再例如:
面试题:
已知如下命令及返回结果,请问echo $user的返回结果为()
[oldboy@test~]$cat test.sh
user=`whoami`
[oldboy@test~]$sh test.sh
[oldboy@test~]$echo $user
问:执行echo $user命令 的结果是什么?
答案:空(无内容输出)