Linux环境shell脚本编程参考_第1页
Linux环境shell脚本编程参考_第2页
Linux环境shell脚本编程参考_第3页
Linux环境shell脚本编程参考_第4页
Linux环境shell脚本编程参考_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 Linux环境shell脚本编程参考2 2shellshell脚本能提高用户操作和管理员脚本能提高用户操作和管理员进行系统管理的效率,一般步骤进行系统管理的效率,一般步骤n 编辑器编写脚本程序编辑器编写脚本程序n shellshell做解释程序,非交互地执行脚本做解释程序,非交互地执行脚本,两种执行方式:,两种执行方式:p 用用shsh命令执行脚本文件命令执行脚本文件1.1. 给脚本文件添加执行权限,用给脚本文件添加执行权限,用././命令执行命令执行3 3HELLO WORLD!HELLO WORLD!n vi hello.shvi hello.shn 按按i i进入插入模式进入插入模式n

2、 输入输入echo “hello world!”echo “hello world!”n : :输入输入wqwq保存退出保存退出n sh hello.shsh hello.sh或者或者chmod 755 hello.shchmod 755 hello.sh./hello.sh./hello.sh保留字符及其含义保留字符及其含义$ shell$ shell变量名的开始,如变量名的开始,如$var$var| | 管道,将标准输出转到下一个命令的标管道,将标准输出转到下一个命令的标准输入准输入 # # 注释开始注释开始& & 在后台执行一个进程在后台执行一个进程? 匹配一个字符匹配一

3、个字符* * 匹配匹配0 0到多个字符到多个字符( (与与DOSDOS不同,可在文件不同,可在文件名中间使用,并且含名中间使用,并且含.).)$- $- 使用使用setset及执行时传递给及执行时传递给shellshell的标志位的标志位$! $! 最后一个子进程的进程号最后一个子进程的进程号$# $# 传递给传递给shell scriptshell script的参数个数的参数个数保留字符及其含义保留字符及其含义$ $* * 传递给传递给shell scriptshell script的参数的参数$ $ 所有参数,个别的用双引号括起来所有参数,个别的用双引号括起来 $ $?上一个命令的返回代

4、码?上一个命令的返回代码 $0 $0 当前当前shellshell的名字的名字 $n (n:1-) $n (n:1-) 位置参数位置参数 $ $ 进程标识号进程标识号(Process Identifier (Process Identifier Number, PID) Number, PID) file file 输出重定向输出重定向 command command 命令替换,如命令替换,如 path=pwd path=pwd fiile fiile 输出重定向,输出重定向,appendappend6 6一、一、VIVI编辑器编辑器n VIVI的三种工作模式的三种工作模式n VIVI的启动的

5、启动n VIVI的退出的退出n VIVI的文本的文本编辑编辑n VIVI命令模式下的操作命令模式下的操作n VIVI行命令模式下的操作行命令模式下的操作VI 编辑器的使用编辑器的使用7 7n 系统配置文件、系统配置文件、shellshell脚本文件等都是文本文脚本文件等都是文本文件,编辑它们都要使用文本编辑器。件,编辑它们都要使用文本编辑器。n 在在LinuxLinux系统中有多种文本编辑器,其中既有系统中有多种文本编辑器,其中既有字符界面如的字符界面如的VIVI、EMACASEMACAS等,也有图形界面的等,也有图形界面的如如“附件附件”菜单下的菜单下的“文本编辑器(文本编辑器(geditg

6、edit)”等,用户可以根据自己的喜好选择使用。等,用户可以根据自己的喜好选择使用。n 学习学习vivi的方法:的方法:vivi的命令太多且难以记忆,而实际上真正的命令太多且难以记忆,而实际上真正经常使用的命令并不是太多,只要掌握几个关经常使用的命令并不是太多,只要掌握几个关键的并加以适当练习很快就上手使用键的并加以适当练习很快就上手使用vivi。8 8为什么选择为什么选择VIVIn 就使用的方便性而言,有比就使用的方便性而言,有比vivi更好的编辑器,还要图更好的编辑器,还要图形化的形化的editedit,为什么还要用,为什么还要用vivi?p历史久远,功能强大,在有些情况下系统中能够找历史

7、久远,功能强大,在有些情况下系统中能够找到的编辑器只有到的编辑器只有vivi;p用户一旦熟悉后,使用非常方便;系统管理员使用用户一旦熟悉后,使用非常方便;系统管理员使用正则表达式可以极大地提高工作效率,而学习正则表达式可以极大地提高工作效率,而学习vivi也也是掌握正则表达式的有效途径。是掌握正则表达式的有效途径。n由于由于vivi的版本不同,其命令格式、功能和用法会有一的版本不同,其命令格式、功能和用法会有一些差别。些差别。ShellShell中执行中执行vivi命令,命令,RedHatRedHat系统实际上是执系统实际上是执行行vimvim,它是传统,它是传统vivi的增强版本的增强版本9

8、 91 1、VIVI的三种工作模式的三种工作模式n 命令模式命令模式p启动启动VIVI默认进入命令模式。此时界面不能编辑默认进入命令模式。此时界面不能编辑,只能接受命令,只能接受命令( (键入的命令看不到键入的命令看不到)p文件的保存,退出,文本的删除、复制、搜索文件的保存,退出,文本的删除、复制、搜索等操作等操作n 输入模式输入模式p编辑模式编辑模式 p命令模式下用命令模式下用i(sert),a(ppend)i(sert),a(ppend),o,so,s等均可进等均可进入该模式。按入该模式。按escesc返回命令模式返回命令模式n 行编辑模式行编辑模式p实际上也是命令模式的一种,在实际上也是

9、命令模式的一种,在命令模式下输命令模式下输入冒号入冒号进入一个命令行,进入一个命令行,可显示地输入命令可显示地输入命令(所以也有些书认为是两种工作模式)。所以也有些书认为是两种工作模式)。三种模式可自由切换,一般切换命令就是操作的英文单词三种模式可自由切换,一般切换命令就是操作的英文单词的首字母的首字母10102 2、VIVI的启动的启动n 启动命令:启动命令:vi my.txtvi my.txtn 如果文件存在,则如果文件存在,则vivi显示文件内容并等待用户显示文件内容并等待用户的命令。的命令。n 如果指定的文件不存在,则如果指定的文件不存在,则vivi将告知用户这是将告知用户这是未命名的

10、文件,并进入一个空白的界面。未命名的文件,并进入一个空白的界面。n 启动启动vivi时都是默认处于命令模式。用户必须使时都是默认处于命令模式。用户必须使用命令切换到文本输入模式才能进行输入编辑用命令切换到文本输入模式才能进行输入编辑,或者可执行删除、复制等编辑命令。,或者可执行删除、复制等编辑命令。vi vi R file_nameR file_name,以只,以只读读方式打方式打开开文件文件11113 3、VIVI的退出的退出n 冒号进命令行模式下:冒号进命令行模式下::q! 不存档强制退出。不存档强制退出。:w 保存但不退出保存但不退出,w w(rite)后后可加所要存档的文档可加所要存档

11、的文档名。名。:wq 存档后退出。存档后退出。p 命令模式下按命令模式下按zz,功能与功能与 :wq 相同。相同。p :x 与与:wq相同相同n 命令模式:命令模式:ZZZZ、ZQZQ保存保存/ /不保存退出不保存退出12124 4、怎么编辑、怎么编辑必须从命令模式转入插入模式才能进行输入必须从命令模式转入插入模式才能进行输入编辑,可用命令有编辑,可用命令有:n 新增新增 (append)pa :从光标所在位置:从光标所在位置后面后面开始新增资料开始新增资料pA: 从光标所在从光标所在行最后面的行最后面的地方开始新增资料。地方开始新增资料。n 插入插入 (insert)pi: 从光标所在位置从

12、光标所在位置前面前面开始插入资料开始插入资料pI :从光标所在:从光标所在行行的第一个非空白字元的第一个非空白字元前面前面开始开始插入资料。插入资料。n 开始开始 (open)po :在光标所:在光标所在行下在行下新增一列并进入输入模式。新增一列并进入输入模式。O: 在光标所在光标所在行上方在行上方新增一列并进入输入模式。新增一列并进入输入模式。冒号进入行命令模式,输入冒号进入行命令模式,输入set nu可设置可设置vi显示行号显示行号13135、命令模式下的操作:删除与修改、命令模式下的操作:删除与修改n x: 删除光标所在字符删除光标所在字符n dw dw 删除一个单词删除一个单词n dd

13、 :删除光标所在的行:删除光标所在的行n s s:删除光标所在字节,:删除光标所在字节,并进入输入模式并进入输入模式# #表示数字表示数字n#x #x 删除几个字符,如删除几个字符,如3x3xn#dw #dw 删除几个单词,如删除几个单词,如3dw3dw表示删除三个单词表示删除三个单词n#dd #dd 删除多个行,如删除多个行,如3dd 3dd 表示删除光标行及光标的表示删除光标行及光标的下两行下两行nd$ d$ 删除光标到行尾的内删除光标到行尾的内容容d d光标键:光标键:左:删除光标前面的字符;左:删除光标前面的字符;右:删除光标所在的字符;右:删除光标所在的字符;上:将当前行与上一行删除

14、;上:将当前行与上一行删除;下:当前行与下一行删除下:当前行与下一行删除ndnd上下光标键上下光标键: :删除当前行之上、下的几行文删除当前行之上、下的几行文本(包括当前行)本(包括当前行)u:恢复刚才被修改的文本恢复刚才被修改的文本 U:恢复光标所在行的所有修改:恢复光标所在行的所有修改.:重复上一次命令的操作重复上一次命令的操作1414命令模式下的操作:命令模式下的操作:文本复制、粘贴文本复制、粘贴n 复制命令:复制命令:y ypyy: yy: 复制整行复制整行pyw:yw:复制光标所在的单词复制光标所在的单词pnywnyw:复制包括光标所在的:复制包括光标所在的n n个单词个单词pnyy

15、:nyy:复制包括当前行在内的复制包括当前行在内的n n行行n 粘贴命令粘贴命令pP Pn 光标移动光标移动ph h、j j、k k、l lpnGnG:移动到底:移动到底n n行行首行行首15156 6、行、行命令模式下的操作:命令模式下的操作:字符串的查找、替换字符串的查找、替换n :/string:/string搜索指定的字符串。搜索指定的字符串。p按键按键n n:继续进行搜索:继续进行搜索 如果写的是斜杠(如果写的是斜杠(/ /):按):按n n会从当前位置向后查找会从当前位置向后查找;如果写的是问号(?),按;如果写的是问号(?),按n n键则从当前位置向键则从当前位置向前查找前查找n

16、 查找且替换查找且替换p:%s /SEARCH /REPLACE:%s /SEARCH /REPLACE把文档中所有把文档中所有SEARCHSEARCH替换成替换成REPLACEREPLACE;p:#,# s /SEARCH /REPLACE /g :#,# s /SEARCH /REPLACE /g 号表示数字,表示从多少行到多少行,把号表示数字,表示从多少行到多少行,把SEARCHSEARCH替换成替换成REPLACEREPLACE;p:s /SEARCH /REPLACE /g :s /SEARCH /REPLACE /g 把把当前光标当前光标所在行中的所在行中的SEARCHSEARCH

17、单词,替换成单词,替换成REPLACEREPLACE,并把所有,并把所有SEARCHSEARCH高亮显示高亮显示16167 7、设置、设置vivi 全局的配置文件位于全局的配置文件位于/etc/vim/vimrc(/etc/vim/vimrc(或者或者/etc/vimrc)/etc/vimrc) 也可以拥有自己独立的配置文件,配置文件位也可以拥有自己独立的配置文件,配置文件位“/.vimrc”/.vimrc”,如果没有该文件,也可以直接用如下,如果没有该文件,也可以直接用如下命令创建并编辑命令创建并编辑比如:比如:set nu set nu 显示行号显示行号set ruler set rule

18、r 显示光标位置显示光标位置set undolevel set undolevel 显示光标位置显示光标位置set smartindent set smartindent 智能缩进智能缩进syntax on(syntax on(或或syn on) syn on) 语法高亮语法高亮1717文本输入状态文本输入状态命令状态命令状态行编辑状态行编辑状态按按ESC键键按按A,I,S,C,O等命令等命令按按“:”键键执行非退出命执行非退出命令,如令,如w三种模式间的转换关系三种模式间的转换关系1818案例练习案例练习n 1. 1. 请在请在 /tmp /tmp 这个目录下建立一个名为这个目录下建立一个名

19、为 vitest vitest 的目录;的目录; n 2. 2. 进入进入 vitest vitest 这个目录当中;这个目录当中; n 3. 3. 将将 /etc/man.config /etc/man.config 拷贝到本目录底下拷贝到本目录底下n 4. 4. 使用使用 vi vi 开启本目录下的开启本目录下的 man.config man.config 这个档案;这个档案; n 5. 5. 在在 vi vi 中设定一下行号;中设定一下行号; n 6. 6. 移动到第移动到第 58 58 行,向右移动行,向右移动 40 40 个字符,请问您看到的双引个字符,请问您看到的双引号内是什么目录

20、?号内是什么目录? n 7. 7. 移动到第一行,并且向下搜寻一下移动到第一行,并且向下搜寻一下“bzip2”bzip2”这个字符串,请这个字符串,请问他在第几行?问他在第几行? n 8. 8. 接着下来,我要将接着下来,我要将 50 50 到到 100 100 行之间的行之间的 man man 改为改为 MANMAN,并,并且一个一个挑选是否需要修改,如何下达指令?且一个一个挑选是否需要修改,如何下达指令? n 9. 9. 修改完之后,突然反悔了,要全部复原,有哪些方法?修改完之后,突然反悔了,要全部复原,有哪些方法? n 10. 10. 我要复制我要复制 51 51 到到 60 60 行这

21、十行的内容,并且贴到最后一行之行这十行的内容,并且贴到最后一行之后;后; n 11. 11. 删除删除 11 11 到到 30 30 行之间的行之间的 20 20 行;行; n 12. 12. 将这个文件另存成一个将这个文件另存成一个 man.test.config man.test.config 的文件;的文件; n 13. 13. 到第到第 29 29 行,并且删除行,并且删除 15 15 个字符;个字符; n 14. 14. 储存后离开储存后离开1919n 1. mkdir /tmp/vitest1. mkdir /tmp/vitestn 2. cd /tmp/vitest 2. cd

22、/tmp/vitest n 3. cp /etc/man.config . 3. cp /etc/man.config . n 4. vi man.config 4. vi man.config n 5. :set nu 5. :set nu n 6. 6. 先按下先按下 58G 58G 再按下再按下 40 40 会看到会看到 /dir/bin/foo /dir/bin/foo 这个字样在这个字样在双引号内;双引号内; n 7. 7. 先执行先执行 1G 1G 或或 gg gg 后,直接输入后,直接输入 /bzip2 /bzip2n 8. 8. 直接执行直接执行 :50,100s/man/MA

23、N/gc :50,100s/man/MAN/gc 即可即可n 9. (1)9. (1)简单的方法可以一直按简单的方法可以一直按 u u 恢复到原始状态,恢复到原始状态,(2)(2)使用不使用不储存离开储存离开 :q! :q! 之后,再重新读取一次该文件;之后,再重新读取一次该文件; n 10. 51G 10. 51G 然后再然后再 10yy 10yy 之后按下之后按下 G G 到最后一行,再到最后一行,再p p粘贴粘贴1010行行 n 11. 11G 11. 11G 之后,再给他之后,再给他 20dd 20dd即可删除即可删除 20 20 行了;行了; n 12. :w man.test.co

24、nfig 12. :w man.test.config n 13. 29G 13. 29G 之后,再给他之后,再给他 15x 15x 即可删除即可删除 15 15 个字符;个字符; n 14. :wq!14. :wq!2020二、二、SHELLSHELL变量与语法变量与语法nShellShell概述概述nshellshell变量和符号变量和符号nshellshell控制流程语法控制流程语法nshellshell中的输出重定向中的输出重定向n脚本实例脚本实例SHELL变量与语法变量与语法21211 1、shellshell的基本元素的基本元素(1 1) # #!/bin/bash /bin/ba

25、sh 必须的,指出必须的,指出shellshell的类型的类型(2 2)# # 注释注释(3 3)变量)变量(4 4)控制)控制一、一、ShellShell概述概述一个一个shell脚本脚本vi clearup.sh#!/bin/bash# this is clearcd /var/logcat /dev/null/var/log/messages /dev/null Linux中的无限大的垃圾回收站中的无限大的垃圾回收站echo Logs cleaned up.22222 2、一般步骤:、一般步骤:(1 1)编辑文件)编辑文件(2 2)保存文件)保存文件(3 3)将文件赋予可执行的权限)将文

26、件赋予可执行的权限(4 4)运行及排错)运行及排错2323注意:注意:p 一般以一般以.sh.sh为文件后缀。没有也能执行。为文件后缀。没有也能执行。p 常见的两种执行方式常见的两种执行方式n ././文件名文件名 在当前目录下写明路径执行,要求文在当前目录下写明路径执行,要求文件必须有执行权限,如件必须有执行权限,如chmod 755 run.shchmod 755 run.sh./run.sh./run.shn sh sh 文件名文件名sh run.shsh run.shp 文件开头指定一个或多个解释脚本程序的文件开头指定一个或多个解释脚本程序的shellshell,如,如#!/bin/b

27、ash#!/bin/bashn 如果指定,注意如果指定,注意/bin/bin不要漏了不要漏了“/”/”,否则用,否则用././方式执行会找不到路径。方式执行会找不到路径。1.1. 不指定的话一般默认以不指定的话一般默认以/bin/sh/bin/sh执行执行shellshell脚本脚本24243、Shell的一般结构的一般结构 shell 类型类型 函数函数 主过程主过程一般模板一般模板 abc.sh#!/bin/bash shell类型类型#a simple shell script example#a functionfunciton sayhello() 函数函数echo Enter Yo

28、ur name:read name 读取来自键盘输入的变量读取来自键盘输入的变量echo Hello $nameecho programme starts here. 主过程主过程sayhelloecho programme ends.25251 1、注释符、注释符# #除了除了#!/bin/bash#!/bin/bash里的里的# #特殊特殊2 2、美元符、美元符 $ $变量符。与反斜杠转义符相反,使其后的普通字符作变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如为变量名,如$a$a表示变量表示变量a a的值。变量字符长度超的值。变量字符长度超过过1 1个时,用个时,用括起来括起来

29、3 3、单引号、单引号被引起的字符全部做普通字符,即全部原样被引起的字符全部做普通字符,即全部原样echo my $SHELLecho my $SHELL二、二、ShellShell中的特殊符号中的特殊符号26264 4、双引号、双引号引号内的内容,除引号内的内容,除$ $、转义符、转义符 、倒引号、倒引号 这三个保留这三个保留特殊功能,其他字符均做普通字符。特殊功能,其他字符均做普通字符。5 5、倒引号、倒引号( (数字数字1 1键旁边的那个键)键旁边的那个键)引号内的字符串当做引号内的字符串当做shellshell命令行解释执行,得到的命令行解释执行,得到的结果取代整个倒引号括起来的部分。

30、结果取代整个倒引号括起来的部分。pwd即即pwd命令的执行结果命令的执行结果$LOGNAME系统变量系统变量2727练习一下:区别下面几句练习一下:区别下面几句n echo my home is $HOMEecho my home is $HOMEn echo “my home is $HOME”echo “my home is $HOME”n echo my home is $HOMEecho my home is $HOMEn echo “my home is pwd”echo “my home is pwd”n echo my home is pwdecho my home is pwd

31、 用于括起来用于括起来shell命令命令 用于原样显示用于原样显示28286. 6. 反斜线反斜线 反斜线是转义字符,它能把特殊字符变成普通字反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(符。在某个字符前面利用反斜杠( )能够阻止)能够阻止shellshell把后面的字符解释为特殊字符。把后面的字符解释为特殊字符。例例4 4:yuqunyuqun $echo “Filename is N0$yuqunyuqun $echo “Filename is N0$* *”Filename is N0$Filename is N0$* * 注意:在单引号括起来的字符串中,反斜线

32、也成注意:在单引号括起来的字符串中,反斜线也成为普通字符,而失去转义字符功能。为普通字符,而失去转义字符功能。2929三、变量三、变量shell shell 变量变量 可以保存如路径名、文件名或者一个数字可以保存如路径名、文件名或者一个数字n 本地变量本地变量 局部变量只在创建它们的局部变量只在创建它们的ShellShell中使用,可以在中使用,可以在shellshell程序内任意使用和修改它们。程序内任意使用和修改它们。n 环境变量环境变量 可以在创建它们的可以在创建它们的ShellShell及其派生出来的任意子及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的程序中使用

33、。有些变量是用户创建的,其他的则是专用的(比如(比如PATHPATH、HOME)HOME)。是系统环境的一部分,不必去定义它。是系统环境的一部分,不必去定义它们,可以在们,可以在shellshell程序中使用它们程序中使用它们 。还能在。还能在shellshell中加以修中加以修改。改。n内部变量内部变量 由系统提供的。与环境变量不同,但用户不能由系统提供的。与环境变量不同,但用户不能修改它们。修改它们。3030本地变量和环境变量的对比本地变量和环境变量的对比31311 1、本地变量(局部变量、用户变量)、本地变量(局部变量、用户变量)u本地变量本地变量 在用户现在的在用户现在的shell生命

34、期的脚本中使用生命期的脚本中使用u 变量名变量名=值值注意:注意: (1)等号两边不可以有空格)等号两边不可以有空格 (2)取值包含空格,必须用双引号括起来)取值包含空格,必须用双引号括起来 (3)Shell变量可以用大小写字母,区分大小写变量可以用大小写字母,区分大小写3232u变量的声明和使用变量的声明和使用(1 1)变量是弱类型的(不用声明类型)变量是弱类型的(不用声明类型)(2 2)变量声明及赋值格式)变量声明及赋值格式 变量变量= =值值(等号两边不能有空格)(等号两边不能有空格)(3 3)变量的引用)变量的引用 $ $变量名变量名 $变量名变量名 变量名为变量名为1 1个字符时建议

35、使用方式一,多余一个字个字符时建议使用方式一,多余一个字符时建议使用方式二符时建议使用方式二 举例举例: $a: $a $abc $abc 3333u显示变量显示变量 echoecho命令可以显示单个变量取值,变量名前加命令可以显示单个变量取值,变量名前加$ $echo $Nameecho $nameecho $nameareecho $name are输出引用变量时加输出引用变量时加比较好比较好3434u清除变量清除变量 unset unset 变量名变量名举例:举例:echo $nameecho $name unset name unset name ( (注意:注意:namename前没

36、有前没有$)$)显示本地所有变量显示本地所有变量 setset3535u设置只读变量设置只读变量 设置变量时,不想再改变其值,可以将之设为只读变量设置变量时,不想再改变其值,可以将之设为只读变量 变量名变量名=值值 readonly 变量名变量名36362 2、环境变量、环境变量环境变量用于所有用户进程(通常称为子进程)。登陆进程称环境变量用于所有用户进程(通常称为子进程)。登陆进程称为父进程,通过为父进程,通过pstree可以查看可以查看u环境变量可以用于所有子程序,着包括编辑器、脚本和应用环境变量可以用于所有子程序,着包括编辑器、脚本和应用 举例:举例:vi a.sh #!/bin/bas

37、h # 检测环境变量检测环境变量 echo 家目录是家目录是 $HOMEu 环境变量可以在命令行中设置,但用户注销时这些值将丢失环境变量可以在命令行中设置,但用户注销时这些值将丢失u 环境变量均为大写环境变量均为大写u 必须用必须用export命令导出命令导出3737n 设置环境变量设置环境变量 p variable-name=valuevariable-name=valuep export variable-name( export variable-name(环境变量名大写环境变量名大写) )n 显示环境变量显示环境变量p env env 可以看到所有的环境变量可以看到所有的环境变量p e

38、cho $echo $环境变量名环境变量名 (显示一个变量)(显示一个变量)n 清除环境变量清除环境变量p unset unset 环境变量名环境变量名3838uHOME HOME : 代表使用者的家目录。代表使用者的家目录。cd cd 去到使用者的家目录去到使用者的家目录 或者利用或者利用 cd cd 就可以直接回到使用者家目录了。就可以直接回到使用者家目录了。uPS1PS1:shellshell的主提示符的主提示符u SHELL SHELL : 目前这个环境使用的目前这个环境使用的 SHELL SHELL 是哪个程序?是哪个程序? 如果是如果是 bash bash 的的话,预设是话,预设是

39、 /bin/bash/bin/bashuPWDPWD:用户当前工作目录的路径。它指出用户目前在:用户当前工作目录的路径。它指出用户目前在LinuxLinux文件系统中处文件系统中处在什么位置。它是由在什么位置。它是由LinuxLinux自动设置的自动设置的u HISTSIZE HISTSIZE : 这个与这个与“历史命令历史命令”有关,曾经下达过的指令可以被系统有关,曾经下达过的指令可以被系统记录下来,而记录的记录下来,而记录的“数目数目”则是由这个值来设定的。则是由这个值来设定的。 u ENV ENV : 这个使用者所使用的个性化环境设置文件的读取文件。这个使用者所使用的个性化环境设置文件的

40、读取文件。 uMAIL MAIL : 当我们使用当我们使用 mail mail 这个指令在收信时,系统会去读取的邮件信这个指令在收信时,系统会去读取的邮件信箱文件箱文件 (mailbox)mailbox)。 u PATH PATH : 就是执行文件搜寻的路径,目录与目录中间以冒号就是执行文件搜寻的路径,目录与目录中间以冒号(:)(:)分隔,分隔, 由于文件的搜寻是依序由由于文件的搜寻是依序由 PATH PATH 的变量内的目录来查询,所以,目录的顺的变量内的目录来查询,所以,目录的顺序也是重要的喔。序也是重要的喔。 uLANG LANG : 语系文件,很多数据都会用到他,当出现编码错误的时候往

41、往语系文件,很多数据都会用到他,当出现编码错误的时候往往需要设置它,中文编码是需要设置它,中文编码是zh_CN.UTF8zh_CN.UTF83939PATHPATH示例示例n 举例:配置举例:配置javajava环境变量可使任何目录都能执行环境变量可使任何目录都能执行javacjavac命令命令(1 1)需要配置)需要配置JavaJava环境变量环境变量u JAVA_HOME(JDKJAVA_HOME(JDK存放的路径)存放的路径)u CLASSPATH CLASSPATH(字节码的位置,让(字节码的位置,让JVMJVM知道要运行的类的字节码放在知道要运行的类的字节码放在哪)哪)u PATH

42、( PATH (让让OSOS找到找到javacjavac等命令的存放的位置)等命令的存放的位置)(2 2)在)在LinuxLinux下配置它们下配置它们u 打开终端打开终端u vi .bash_profilevi .bash_profileu 在配置文件中追加内容在配置文件中追加内容 JAVA_HOME=JDKJAVA_HOME=JDK存放位置存放位置 CLASSPATH=.(CLASSPATH=.(当前目录)当前目录) PATH=$JAVA_HOME/BIN:$PATH(PATH=$JAVA_HOME/BIN:$PATH(不覆盖原来的内容,追加)不覆盖原来的内容,追加) export JAV

43、A_HOME CLASSPATH PATHexport JAVA_HOME CLASSPATH PATHu 保存,让配置起作用(保存,让配置起作用(source .bash_profilesource .bash_profile或者注销或者注销)4040让环境变量的修改在退出让环境变量的修改在退出shellshell再次登录时仍有效,再次登录时仍有效,需要在相关配置文件中修改需要在相关配置文件中修改BashBash的初始化文件有:的初始化文件有:/etc/profile/etc/profile、/.bash_profile/.bash_profile、/.bash_login/.bash_lo

44、gin、/.profile/.profile、/.bashrc/.bashrc、/etc/bashrc/etc/bashrc/etc/profile/.bash_profile/.bashrc/etc/bashrc/.bash_login/.profile4141n /etc/profile /etc/profile 存放一些全局(共有)变量,不管哪个用户,登录时都存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些会读取该文件。通常设置一些ShellShell变量变量PATH,USER,HOSTNAMEPATH,USER,HOSTNAME和和HISTSIZEHISTSI

45、ZE等等n /.bash_profile:/.bash_profile:每个用户都可使用该文件输入专用于自每个用户都可使用该文件输入专用于自己使用的己使用的shellshell信息信息, ,当用户登录时当用户登录时, ,该文件仅仅执行一次该文件仅仅执行一次! !默认情况下默认情况下, ,他设置一些环境变量他设置一些环境变量, ,执行用户的执行用户的.bashrc.bashrc文件文件. .n/.bashrc:/.bashrc:该文件包含专用于你的该文件包含专用于你的bash shellbash shell的的bashbash信息信息, ,当登录时以及每次打开新的当登录时以及每次打开新的shel

46、lshell时时, ,该该文件被读取该该文件被读取. .n/etc/bashrc:/etc/bashrc:为每一个运行为每一个运行bash shellbash shell的用户执行此文件的用户执行此文件. .当当bash shellbash shell被打开时被打开时, ,该文件被读取该文件被读取. .4242上述配置文件的作用上述配置文件的作用1 1)登录)登录LinuxLinux先启动系统配置文件先启动系统配置文件/etc/profile/etc/profile,并从,并从/etc/profile.d/etc/profile.d目录的配置文件中搜集目录的配置文件中搜集shellshell的

47、设置,的设置,为系统的为系统的每个用户每个用户设置环境信息。设置环境信息。2 2)用户配置文件)用户配置文件/.bash_profile/.bash_profile,每个用户,每个用户专用于自专用于自己使用己使用的的shellshell信息信息, ,仅用户仅用户登录时执行一次登录时执行一次! !默认情况下默认情况下, ,此文件通过脚本执行同目录下用户的此文件通过脚本执行同目录下用户的.bashrc.bashrc文件。文件。3 3)/.bashrc/.bashrc文件包含专用于用户文件包含专用于用户bash shellbash shell的的bashbash信信息息, ,登录及每次打开新的登录及

48、每次打开新的shellshell时都会执行时都会执行。里面又会。里面又会调用调用/etc/bashrc/etc/bashrc4343设置用户自己的环境变量设置用户自己的环境变量n 在在/home/user/.bash_profile/home/user/.bash_profile中定义下句,会怎样?中定义下句,会怎样?alias la=ls a|grep “.alias la=ls a|grep “.* *”答:答:useruser下次再登陆,其下次再登陆,其shellshell会自动建立一个别名会自动建立一个别名命令命令lala,功能为查看当前目录下名字以,功能为查看当前目录下名字以. .开

49、头的文开头的文件。件。p写在写在/.bash_profile/.bash_profile中,需重新登录才能有效。中,需重新登录才能有效。除非运行除非运行source .bash_profilesource .bash_profile使其立即有效。使其立即有效。p写在写在/.bashrc/.bashrc中,则打开新的终端中就有效中,则打开新的终端中就有效n 区别:区别:bash_profilebash_profile只在会话开始的时候读取一次,只在会话开始的时候读取一次,而而bashrcbashrc则每次打开终端时都会读取则每次打开终端时都会读取n 按照传统,定义的变量如按照传统,定义的变量如P

50、ATHPATH放到放到.bash_profile.bash_profile中,中,而像别名函数等放在而像别名函数等放在.bashrc.bashrc中,但是中,但是.bash_profile.bash_profile先于先于.bashrc.bashrc读取内容,也可全放入读取内容,也可全放入.bashrc.bashrc中中习惯用各自的配置文件,编辑不需要习惯用各自的配置文件,编辑不需要root权限权限44443 3、内部变量、内部变量 内部变量是内部变量是LinuxLinux所提供的一种特殊类型的变量,所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在这类变量在程序中用来作出判断。在s

51、hellshell程序内程序内这类变量的值是不能修改的。这类变量的值是不能修改的。部分内部变量是:部分内部变量是:u$# $# 传送给传送给shellshell程序的位置参数的数量程序的位置参数的数量u$?$?最后命令的完成码或者在最后命令的完成码或者在shellshell程序内部执程序内部执行的行的shellshell程序(返回值)程序(返回值)u$0shell$0shell程序的名称程序的名称u$ $* *调用调用shellshell程序时所传送的全部参数的单字程序时所传送的全部参数的单字符串,符串, “参数参数1”“1”“参数参数2”2”形式保存的参数形式保存的参数4545u$“参数参数

52、1”“1”“参数参数2”2”形式保存的参形式保存的参数数u$n$n第第n n个参数个参数u$本程序的本程序的PIDPIDu$!$!上一个命令的上一个命令的PIDPID4646使用使用shellshell预定义变量的脚本举例预定义变量的脚本举例47474 4 位置参数位置参数(1 1) 位置参数及引用位置参数及引用 可以编写一个可以编写一个shellshell脚本,当从命令行或者从其他脚本,当从命令行或者从其他shellshell脚本中调用它的时候,这个脚本接收若干参数。这些选项是脚本中调用它的时候,这个脚本接收若干参数。这些选项是通过通过LinuxLinux作为位置参数(作为位置参数(posi

53、tional parameterpositional parameter)提供给)提供给shellshell程序的。在程序的。在shellshell脚本中应有变量,接收实参,这类变脚本中应有变量,接收实参,这类变量的名称很特别,分别是量的名称很特别,分别是1 1,2 2,3 3,这类变量称为位置,这类变量称为位置变量。位置参数变量。位置参数1 1存放在位置变量存放在位置变量1 1中,位置参数中,位置参数2 2存放位置存放位置变量变量2 2中,中,在程序中可以使用,在程序中可以使用$1$1,$2$2,来访问,来访问,举例:举例: 4848(2 2) 用用setset命令为位置参数赋值命令为位置参

54、数赋值在在shellshell程序中可以利用程序中可以利用setset命令为位置参数赋值或重命令为位置参数赋值或重新赋值。新赋值。一般格式:一般格式:set set 参数表参数表 说明:该命令后面无参数时,将显示系统中的系统变说明:该命令后面无参数时,将显示系统中的系统变量的值;如果有参数将分别给位置参数赋值。量的值;如果有参数将分别给位置参数赋值。4949四、变量表达式四、变量表达式1 1、条件判断命令、条件判断命令testtesttest n1 -test n1 -参数参数 n2n2(或(或 参数参数 表达式)表达式)真返回真返回0 0,假返回,假返回1 1。(1 1)整数,比较运算符见右

55、表)整数,比较运算符见右表test 1test 1 -lt -lt 4 4 # #判断判断14104 4、其他参数、其他参数-a-a 逻辑与逻辑与-o-o 逻辑或逻辑或! 逻辑非逻辑非53533 3、控制流程、控制流程n shellshell运算符和运算符和C C语言基本类似,也有分支、语言基本类似,也有分支、循环流程控制。循环流程控制。n 简单举例简单举例后面例子涉及的命令后面例子涉及的命令p seqseq命令:产生命令:产生1-91-9的数字序列的数字序列 比如比如 seq 1 4seq 1 4p exprexpr命令:对表达式求值命令:对表达式求值p 直接求值命令:对被括起来的表达式求值

56、直接求值命令:对被括起来的表达式求值5454表达式求值:表达式求值:$ expr 1 + 3$ expr 1 + 3$ expr 2 1$ expr 2 1$ expr 1 $ expr 1 * * 3 3 使用使用* *要加转义符要加转义符$ echo expr 1 + 3$ echo expr 1 + 3注意:表达式中,数字和运算符指教要有空格,出现在注意:表达式中,数字和运算符指教要有空格,出现在语句中要加反引号语句中要加反引号55551 1)分支结构)分支结构n ifif分支分支if if $# -eq 0 $# -eq 0 thenthenecho “echo “输入了输入了0 0个

57、参数个参数”elif elif $# -lt 1 $# -lt 1 then echo “then echo “输入了多个参数输入了多个参数”else echo “else echo “输入了输入了1 1个参数个参数”fifin casecasecase “$#” case “$#” inin 0 0) ) echo “ echo “输入了输入了0 0个参数个参数” ;1 1) ) echo “ echo “输入了输入了1 1个参数个参数” ;* *) ) echo “ echo “输入了多个参数输入了多个参数”; esacesac每个分支条件后必须以两每个分支条件后必须以两个分号结尾个分号结

58、尾56562 2)循环结构)循环结构n for for 例子例子输出输出100100内内1010的倍数的倍数for i in seq 1 9for i in seq 1 9dodoecho expr $i echo expr $i * * 10 10donedone或写或写 echo $(expr $i echo $(expr $i * * 10) 10)n乘号前加转义符,乘号前加转义符,与数字间要有空格。与数字间要有空格。5757n read read 变量变量1 1 变量变量2 2 p可以从键盘上读取多个变量的值,用户输入数据时可以从键盘上读取多个变量的值,用户输入数据时,以空格或者,以空

59、格或者TabTab键作为分隔。键作为分隔。p如果输入的数据个数不够,则从左到右对应赋值,如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空;没有输入的变量为空;p如果输入的数据个数超了,则从左到右对应赋值,如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。最后一个变量被赋予剩余的所有数据。5858read a bread a bfor i in seq $a $bfor i in seq $a $bdodoecho expr $i echo expr $i * * 10 10donedone输出输出a a到到b b序列数各数的序列数各数的1010倍数倍数

60、5959n whilewhile例子例子求求1 1到到100100的和的和i=1i=1sum=0sum=0while $i le 100 while $i le 100 dodosum=$sum+$isum=$sum+$i i=$i+1 i=$i+1donedoneecho $sumecho $sumn :直接求值命令:直接求值命令6060五五 命令结果重定向命令结果重定向p1 1stdoutstdout标准输出标准输出p2 2stderrstderr标准错误标准错误n 输出重定向到文件输出重定向到文件filefile,终端上只能看到标准错误:,终端上只能看到标准错误:# #命令命令 file filen 错误重定向到文件错误重定向到文件file file ,终端上只能看到标准输出:,终端上只能看到标准输出:# #

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论