shell编程基础

纵饮孤独 提交于 2020-02-25 11:35:07

运行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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!