运行Linux程序有三种方法:
1.直接运行(文件具有可执行权限):
./test.sh
2.调用命令解释器执行程序:
/bin/bash test.sh
3.使用source执行程序:
source test.sh
一个简单的shell程序——test.sh:
#! /bin/bash # shell脚本以#!开始,/bin/bash告诉shell应该选择哪个解释器解释这个脚本 cd test echo "Hello"
三种方法均会输出“hello”无疑,但是用pwd查看当前路径是否改变时:
keegen@keegensCP:~$ pwd /home/keegen keegen@keegensCP:~$ ./test.sh Hello keegen@keegensCP:~$ pwd /home/keegen keegen@keegensCP:~$ /bin/bash test.sh Hello keegen@keegensCP:~$ pwd /home/keegen keegen@keegensCP:~$ source test.sh Hello keegen@keegensCP:~/test$ pwd /home/keegen/test
可以看出,第三种方法和前面两种方法是不同的,用source执行程序目录发生了改变!
Linux shell可执行命令有三种:内建命令,shell函数和外部命令。
1. 内建命令。shell程序本身包含的命令。这些命令集成在shell解释器中,如cd,echo命令,在执行内建命令时,没有进程的创建和消亡。
2. shell函数。是一系列程序代码,以shell语言写成。
3. 外部命令。独立于shell的可执行程序。如find,grep,test.sh。命令行shell在执行外部命令时,会创建一个当前shell的复制进程来执行。在执行过程中,存在命令的创建和消亡。
使用source执行shell脚本时,不会创建子进程,而是在父进程中直接执行!
用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行 shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个是登录时系统启动的shell,另一 个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来 说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。
在子 shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内 的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。 export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。
Linux Shell中的变量
变量赋值的方式为:变量名称=值
其中=两边不要有任何空格。当你想要用变量名称来获得值时,要在名称前面加$符号。赋值内容包含空格时,要加引号,如:
keegen@keegensCP:~$ str="Hello world" keegen@keegensCP:~$ echo $str Hello world
当变量被裸体出现的时候(没有$符),变量可能存在以下几种情况:变量被声明或被赋值,变量被unset,变量被export。
被一对双引号(“ ”)括起来的变量替换是不被阻止的。所以双引号被称为部分引用,但使用单引号(' '),变量替换就会被禁止,不会发生变量替换:
keegen@keegensCP:~$ var=123 keegen@keegensCP:~$ echo "$var" 123 keegen@keegensCP:~$ echo '$var' $var
shell中的变量有两种类型,局部变量和全局变量。环境变量是全局变量的一种。
用echo可以输出变量。echo支持的转义字符如下所示:
\a 警示字符
\b 退格
\c 忽略输出中最后的换行符号。这个参数之后的任何字符,包括后面的参数都会被忽略掉。
\f 清除屏幕
\n 换行
\r 回车
\t 水平制表符号
\v 垂直制表符号
\\ 反斜杠字符
环境变量
$PATH是Linux环境变量之一。$PATH往往包含了Linux各个可执行文件所在的目录。当shell接受到命令,发现他是非内部命令,并未给出完整路径时,就会依次在$PATH从前到后搜寻命令文件,知道找到为止。
可以将环境变量的改变用export写入/etc/profile或用户.bashrc文件中,后者的优先级高于前者,如:
export PATH=$HOME/bin:$PATH
来源:https://www.cnblogs.com/keegentang/p/10657279.html