Shell脚本的执行方式能够有如下几种:java
方式一: 编程
./script.sh # 利用小数点来执行
方式二: bash
sh script.sh 或 bash script.sh # 利用bash(sh)来执行脚本
前面两种方式其实都是同样的:都是在当前父进程下的子进程中执行,子进程完成后,子进程中的各项变量或操做将会结束而不会传回到父进程中.举例来讲:spa
能够看到,执行后再看脚本中两个变量,在父进程中不起做用!code
备注: 若是在script2.sh文件里面执行script1.sh的脚本,那么就是执行. ./script1.sh [中间有空格]blog
方式三: 进程
source script.sh 或 . liqiang.sh# 利用小数点来执行
而经过第三种方式执行(source test.sh)的话,在父进程中就起做用了:ip
这就是直接执行与用source命令执行的区别,前者只做用于子进程自己,后者则做用于整个父进程。class
所以:如要想不注销系统,并让全局配置文件生效,则必须用source命令:test
好比说: 在全局配置文件中/etc/profile添加了JAVA_HOME,要让他对整个环境生效
export JAVA_HOME=/usr/java/jdk1.7.0_75
就必须执行source /etc/profile
注意:在执行时要赋权限
chmod a+x liqiang.sh #赋权限chmod a+x script-name
补充知识点:
一个规范的Shell脚本在第一行会指出由哪一个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程通常为:
#!/bin/bash
或
#!/bin/sh
注意:
(1)在Shell中若是一行的第一个字母是#,则是注释,可是上面两个是写在第一行,因此不是脚本注释行,若是写在某个命令以后,则变成注释行。
(2)sh为bash的软连接,大多数状况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。