首页 > 代码库 > 第一章 初识shell程序
第一章 初识shell程序
1.执行shell脚本的三种方法:
1.1 使文件具有可执行权限,直接运行文件。
1.1.1 给文件加上x权限
1.1.2 ./test.sh
1.2 直接调用命令解释器执行程序
1.2.1 source test.sh 或者 . test.sh 点后边有空格
1.3 使用source执行文件
这种方式在执行脚本时,不会创建子进程,直接在父进程中执行。而上面两种都会创建子进程执行脚本。
在脚本执行过程中,并没有进程创建和消亡。当需要修改当前shell本身变量时,使用source命令。
2.linux shell 的命令种类
2.1 可执行的命令有3种:内建命令、shell函数和外部命令。
(1)内建命令就是shell程序本身包含的命令,执行这些命令时,没有进程的创建和消亡。
(2)shell函数是一些列程序代码,以shell语言写成,它可以向其他命令一样被引用。
(3)外部命令是独立于shell的可执行程序。如find、grep、echo.sh。
3.变量
3.1 linux中变量不区分类型和限制大小,都属于字符串。
3.2 变量分为两分种:局部变量和全局变量
3.2.1 局部变量在定义时需要用local声明 local aa=10
3.2.2 环境变量是全局变量的一种,全局变量在全局范围内可见,在定义是不需要声明
环境变量:在通常的情况下,每个进程都是有自己的“环境”的,这个环境是由一组变量组成,这些变量中存在进程可能需要引用的信息
定义环境变量:export
主要参数: -f // 代表【变量名称】中为函数名称
-n // 删除指定的变量。实际上并没有删除,只是不会输出到后续的执行环境中。
-p // 列出所有的shell赋予程序的环境变量
行为模式: export命令修改当前shell进程的环境变量。若将export命令置于脚本中被调用执行,则export命令对父shell进程的环境变
量没有影响。有效期仅维持到当前进程消亡为止,如果想要永久保存,可以将export语句写入shell登录启动文件中。
bash的启动/登录文件:
/etc/profile //系统范围的默认值,大部分用来设置环境
/etc/bashrc //特定于bash的,系统范围函数与别名
$HOME/.bash_profile //用户定义的,环境默认设置,在每个用户的home目录下都可找到
$HOME/.bashrc //用户定义的bash初始化文件,在每个用户的home目录下。只有交互式的shell和用户脚本
才读取这个文件
$HOME/.bash_logout //登录文件,用户定义的指令文件,在每个用户的home目录下。在登录shell的时候会被读取。
临时定义环境变量:env
-i //使shell在执行脚本时,清空所有由父shell继承来的环境变量
-u //从环境变量中删除一个变量
set //查看所有变量,包括本地变量和全局变量
unset
-v //默认是这个选项,删除变量
-f //删除指定的函数
4.常见的环境变量:
HOME 用户的专属目录,在linux 中用“~”扩展
PATH 外部命令的搜索路径
HISTSIZE 保存你是命令的条数
LOGNAME 当前用户的登录名
HOSTNAME 是指主机名
SHELL 当前用户使用的shell类型
LANG/LANGUAGE语言相关的环境变量
MAIL 当前用户的邮件存放目录
PS1 基本提示符,root用户是“#”,普通用户是“$”。也是开头显示的路径
PS2 附属提示符,默认是“>”
5.linux shell 是解释型语言
5.1 翻译的方式有两种,一种是编译,另一种是解释。两种方式只是翻译的时间不同,编译型语言在程序执行之前,需要一个专门的编译过程,
把程序编译成机器语言的文件。
解释型语言则不同,它是在程序执行时进行翻译。
许多大中型的程序都是用编译语言写的,如C/C++.JAVA等。这种有点就是高效。缺点是难以执行上一层的一些简单操作,因为编译语言
运行与机器底层
脚本语言都是解释性语言。如shell、Python、AWK等。这种执行层面高于编译型语言,因此可以轻松地进行一些高级操作。
6.小结:
6.1 Linux Shell脚本应该以“#!”开始,这个机子告诉命令行shell应该选择哪个解释器来解释这个脚本。这种机制提供了一种编程规范,提高编
写脚本的灵活性,例如,你可以选择使用其他语言来编写脚本
6.2 Linux Shell运行在环境中。环境变量在用户登录启动第一个shell(登录shell)时从启动文件中读取。不同shell的启动文件不相同。环境变
量在运行过程中可以通过export命令改变。env命令为了运行命令,能够临时创造全新的环境变量。
6.3 Linux Shell运行时,会创建一个和父进程一模一样的子进程,子进程的环境变量继承父进程。所有子进程中对其环境变量的操作都不会影响
到父进程。例如,cd命令的执行仅仅改变子进程的环境变量。
6.4 $PATH是linux的环境变量之一。$PATH往往包含了linux各个可执行文件的所在目录,当shell接受到命令发现此命令为非内部命令,并给出
了完整路径时,就会一次在$PATH变量中以从前到后的顺序搜寻命令文件,直到找到为止。
6.5 可以将环境变量的改变用export写入/etc/profile或$HOME/.profile中。后者的优先级高于前者。例如,export PATH=$HOME/bin:$PATH,
即向$PATH路径中添加$HOME/bin目录,这样,在用户每次登陆的时候都会自动加载环境变量的改变。
6.6 编译型语言的执行效率高于解释型语言。但是解释型语言在开发的容易度、可移植性和简洁性等方面都高于编译型语言。因为linux shell运行与
内核之上,因此可以方便地进行一些文件系统的高级操作。具体使用哪种语言,则视程序的需求而定。
6.7 UNIX/Linux 的shell语言是被广泛使用的脚本语言,常见于系统维护中。如果合理的使用脚本维持在POSIX接口支持的范围内,则可能获得高度
的可移植性。及时有问题也可以通过很小的改动来完成想要做的事情。
第一章 初识shell程序