shell脚本教程详细讲解很好_第1页
shell脚本教程详细讲解很好_第2页
shell脚本教程详细讲解很好_第3页
shell脚本教程详细讲解很好_第4页
shell脚本教程详细讲解很好_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

1、.1 1 College of Information Science and Engineering Shandong Agricultural University SHELL脚本编程 .2 2 shellshell脚本能提高用户操作和管理员脚本能提高用户操作和管理员 进行系统管理的效率,一般步骤进行系统管理的效率,一般步骤 n 编辑器编写脚本程序编辑器编写脚本程序 n shellshell做解释程序,非交互地执行脚本做解释程序,非交互地执行脚本 ,两种执行方式:,两种执行方式: p 用用shsh命令执行脚本文件命令执行脚本文件 1.1. 给脚本文件添加执行权限,用给脚本文件添加执行权限,

2、用././命令执行命令执行 .3 3 HELLO WORLD!HELLO WORLD! n vi hello.shvi hello.sh n 按按i i进入插入模式进入插入模式 n 输入输入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 .4 4 一、一、VIVI编辑器编辑器 n VIVI的三种工作模式的三种工作模式 n VIVI的启动的启动 n

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

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

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

6、,它是传统,它是传统vivi的增强版本的增强版本 .7 7 1 1、VIVI的三种工作模式的三种工作模式 n 命令模式命令模式 p启动启动VIVI默认进入命令模式。此时界面不能编辑,默认进入命令模式。此时界面不能编辑, 只能接受命令只能接受命令( (键入的命令看不到键入的命令看不到) p文件的保存,退出,文本的删除、复制、搜索等文件的保存,退出,文本的删除、复制、搜索等 操作操作 n 输入模式输入模式 p编辑模式编辑模式 p命令模式下用命令模式下用i(sert),a(ppend)i(sert),a(ppend),o,so,s等均可进等均可进 入该模式。按入该模式。按escesc返回命令模式返回

7、命令模式 n 行编辑模式行编辑模式 p实际上也是命令模式的一种,在实际上也是命令模式的一种,在命令模式下输入命令模式下输入 冒号冒号进入一个命令行,进入一个命令行,可显示地输入命令可显示地输入命令(所以(所以 也有些书认为是两种工作模式)。也有些书认为是两种工作模式)。 三种模式可自由切换,一般切换命令就是操作的英文单词三种模式可自由切换,一般切换命令就是操作的英文单词 的首字母的首字母 .8 8 2 2、VIVI的启动的启动 n 启动命令:启动命令:vi my.txtvi my.txt n 如果文件存在,则如果文件存在,则vivi显示文件内容并等待用户显示文件内容并等待用户 的命令。的命令。

8、 n 如果指定的文件不存在,则如果指定的文件不存在,则vivi将告知用户这是将告知用户这是 未命名的文件,并进入一个空白的界面。未命名的文件,并进入一个空白的界面。 n 启动启动vivi时都是默认处于命令模式。用户必须使时都是默认处于命令模式。用户必须使 用命令切换到文本输入模式才能进行输入编辑用命令切换到文本输入模式才能进行输入编辑 ,或者可执行删除、复制等编辑命令。,或者可执行删除、复制等编辑命令。 vi vi R file_nameR file_name,以只读方式打开文件,以只读方式打开文件 .9 9 3 3、VIVI的退出的退出 n 冒号进命令行模式下:冒号进命令行模式下: :q!

9、不存档强制退出。不存档强制退出。 :w 保存但不退出保存但不退出,w w(rite)后后可加所要存档的文档可加所要存档的文档 名。名。 :wq 存档后退出。存档后退出。 p 命令模式下按命令模式下按zz,功能与功能与 :wq 相同。相同。 p :x 与与:wq相同相同 n 命令模式:命令模式: ZZZZ、ZQZQ保存保存/ /不保存退出不保存退出 .1010 4 4、怎么编辑、怎么编辑 必须从命令模式转入插入模式才能进行输入必须从命令模式转入插入模式才能进行输入 编辑,可用命令有编辑,可用命令有: n 新增新增 (append) pa :从光标所在位置:从光标所在位置后面后面开始新增资料开始新

10、增资料 pA: 从光标所在从光标所在行最后面的行最后面的地方开始新增资料。地方开始新增资料。 n 插入插入 (insert) pi: 从光标所在位置从光标所在位置前面前面开始插入资料开始插入资料 pI :从光标所在:从光标所在行行的第一个非空白字元的第一个非空白字元前面前面开始开始 插入资料。插入资料。 n 开始开始 (open) po :在光标所:在光标所在行下在行下新增一列并进入输入模式。新增一列并进入输入模式。 O: 在光标所在光标所在行上方在行上方新增一列并进入输入模式。新增一列并进入输入模式。 冒号进入行命令模式,输入冒号进入行命令模式,输入set nu可设置可设置vi显示行号显示行

11、号 .1111 5、命令模式下的操作:删除与修改、命令模式下的操作:删除与修改 n x: 删除光标所在字符删除光标所在字符 n dw dw 删除一个单词删除一个单词 n dd :删除光标所在的行:删除光标所在的行 n s s:删除光标所在字节,:删除光标所在字节, 并进入输入模式并进入输入模式 # #表示数字表示数字 n#x #x 删除几个字符,如删除几个字符,如3x3x n#dw #dw 删除几个单词,如删除几个单词,如 3dw3dw表示删除三个单词表示删除三个单词 n#dd #dd 删除多个行,如删除多个行,如3dd 3dd 表示删除光标行及光标的表示删除光标行及光标的 下两行下两行 nd

12、$ d$ 删除光标到行尾的内删除光标到行尾的内 容容 d d光标键:光标键: 左:删除光标前面的字符;左:删除光标前面的字符; 右:删除光标所在的字符;右:删除光标所在的字符; 上:将当前行与上一行删除;上:将当前行与上一行删除; 下:当前行与下一行删除下:当前行与下一行删除 ndnd上下光标键上下光标键: : 删除当前行之上、下的几行文删除当前行之上、下的几行文 本(包括当前行)本(包括当前行) u:恢复刚才被修改的文本恢复刚才被修改的文本 U:恢复光标所在行的所有修改:恢复光标所在行的所有修改 .:重复上一次命令的操作重复上一次命令的操作 .1212 命令模式下的操作:命令模式下的操作:文

13、本复制、粘贴文本复制、粘贴 n 复制命令:复制命令:y y pyy: yy: 复制整行复制整行 pyw:yw:复制光标所在的单词复制光标所在的单词 pnywnyw:复制包括光标所在的:复制包括光标所在的n n个单词个单词 pnyy:nyy:复制包括当前行在内的复制包括当前行在内的n n行行 n 粘贴命令粘贴命令 pP P n 光标移动光标移动 ph h、j j、k k、l l pnGnG:移动到底:移动到底n n行行首行行首 .1313 6 6、行、行命令模式下的操作:命令模式下的操作:字符串的查找、替换字符串的查找、替换 n :/string:/string搜索指定的字符串。搜索指定的字符串

14、。 p按键按键n n:继续进行搜索:继续进行搜索 如果写的是斜杠(如果写的是斜杠(/ /):按):按n n会从当前位置向后查找会从当前位置向后查找 ;如果写的是问号(?),按;如果写的是问号(?),按n n键则从当前位置向键则从当前位置向 前查找前查找 n 查找且替换查找且替换 p:%s /SEARCH /REPLACE:%s /SEARCH /REPLACE 把文档中所有把文档中所有SEARCHSEARCH替换成替换成REPLACEREPLACE; p:#,# s /SEARCH /REPLACE /g :#,# s /SEARCH /REPLACE /g 号表示数字,表示从多少行到多少行,

15、把号表示数字,表示从多少行到多少行,把 SEARCHSEARCH替换成替换成REPLACEREPLACE; p:s /SEARCH /REPLACE /g :s /SEARCH /REPLACE /g 把把当前光标当前光标所在行中的所在行中的SEARCHSEARCH单词,替换成单词,替换成 REPLACEREPLACE,并把所有,并把所有SEARCHSEARCH高亮显示高亮显示 .1414 7 7、设置、设置vivi 全局的配置文件位于全局的配置文件位于/etc/vim/vimrc(/etc/vim/vimrc(或者或者/etc/vimrc)/etc/vimrc) 也可以拥有自己独立的配置文件

16、,配置文件位也可以拥有自己独立的配置文件,配置文件位 “/.vimrc”/.vimrc”,如果没有该文件,也可以直接用如下,如果没有该文件,也可以直接用如下 命令创建并编辑命令创建并编辑 比如:比如: set nu set nu 显示行号显示行号 set ruler set ruler 显示光标位置显示光标位置 set undolevel set undolevel 显示光标位置显示光标位置 set smartindent set smartindent 智能缩进智能缩进 syntax on(syntax on(或或syn on) syn on) 语法高亮语法高亮 .1515 文本输入状态文本

17、输入状态命令状态命令状态行编辑状态行编辑状态 按按ESC键键 按按A,I,S,C,O 等命令等命令 按按“:”键键 执行非退出命执行非退出命 令,如令,如w 三种模式间的转换关系三种模式间的转换关系 .1616 案例练习案例练习 n 1. 1. 请在请在 /tmp /tmp 这个目录下建立一个名为这个目录下建立一个名为 vitest vitest 的目录;的目录; n 2. 2. 进入进入 vitest vitest 这个目录当中;这个目录当中; n 3. 3. 将将 /etc/man.config /etc/man.config 拷贝到本目录底下拷贝到本目录底下 n 4. 4. 使用使用 v

18、i vi 开启本目录下的开启本目录下的 man.config man.config 这个档案;这个档案; n 5. 5. 在在 vi vi 中设定一下行号;中设定一下行号; n 6. 6. 移动到第移动到第 58 58 行,向右移动行,向右移动 40 40 个字符,请问您看到的双引个字符,请问您看到的双引 号内是什么目录?号内是什么目录? n 7. 7. 移动到第一行,并且向下搜寻一下移动到第一行,并且向下搜寻一下“bzip2”bzip2”这个字符串,请这个字符串,请 问他在第几行?问他在第几行? n 8. 8. 接着下来,我要将接着下来,我要将 50 50 到到 100 100 行之间的行之

19、间的 man man 改为改为 MANMAN,并,并 且一个一个挑选是否需要修改,如何下达指令?且一个一个挑选是否需要修改,如何下达指令? n 9. 9. 修改完之后,突然反悔了,要全部复原,有哪些方法?修改完之后,突然反悔了,要全部复原,有哪些方法? n 10. 10. 我要复制我要复制 51 51 到到 60 60 行这十行的内容,并且贴到最后一行之行这十行的内容,并且贴到最后一行之 后;后; n 11. 11. 删除删除 11 11 到到 30 30 行之间的行之间的 20 20 行;行; n 12. 12. 将这个文件另存成一个将这个文件另存成一个 man.test.config ma

20、n.test.config 的文件;的文件; n 13. 13. 到第到第 29 29 行,并且删除行,并且删除 15 15 个字符;个字符; n 14. 14. 储存后离开储存后离开 .1717 n 1. mkdir /tmp/vitest1. mkdir /tmp/vitest n 2. cd /tmp/vitest 2. cd /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. 先按

21、下先按下 58G 58G 再按下再按下 40 40 会看到会看到 /dir/bin/foo /dir/bin/foo 这个字样在这个字样在 双引号内;双引号内; n 7. 7. 先执行先执行 1G 1G 或或 gg gg 后,直接输入后,直接输入 /bzip2 /bzip2 n 8. 8. 直接执行直接执行 :50,100s/man/MAN/gc :50,100s/man/MAN/gc 即可即可 n 9. (1)9. (1)简单的方法可以一直按简单的方法可以一直按 u u 恢复到原始状态,恢复到原始状态,(2)(2)使用不使用不 储存离开储存离开 :q! :q! 之后,再重新读取一次该文件;之

22、后,再重新读取一次该文件; 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.config 12. :w man.test.config n 13. 29G 13. 29G 之后,再给他之后,再给他 15x 15x 即可删除即可删除 15 15 个字符;个字符; n 14. :wq!14. :wq! .1818 二、二、SHELLSH

23、ELL变量与语法变量与语法 nShellShell概述概述 nshellshell变量和符号变量和符号 nshellshell控制流程语法控制流程语法 nshellshell中的输出重定向中的输出重定向 n脚本实例脚本实例 SHELL变量与语法变量与语法 .1919 1 1、shellshell的基本元素的基本元素 (1 1) # #!/bin/bash /bin/bash 必须的,指出必须的,指出shellshell的类型的类型 (2 2)# # 注释注释 (3 3)变量)变量 (4 4)控制)控制 一、一、ShellShell概述概述 一个一个shell脚本脚本 vi clearup.sh

24、 #!/bin/bash # this is clear cd /var/log cat /dev/null/var/log/messages /dev/null Linux中的无限大的垃圾回收站中的无限大的垃圾回收站 echo Logs cleaned up. .2020 2 2、一般步骤:、一般步骤: (1 1)编辑文件)编辑文件 (2 2)保存文件)保存文件 (3 3)将文件赋予可执行的权限)将文件赋予可执行的权限 (4 4)运行及排错)运行及排错 .2121 注意:注意: p 一般以一般以.sh.sh为文件后缀。没有也能执行。为文件后缀。没有也能执行。 p 常见的两种执行方式常见的两种

25、执行方式 n ././文件名文件名 在当前目录下写明路径执行,要求文在当前目录下写明路径执行,要求文 件必须有执行权限,如件必须有执行权限,如 chmod 755 run.shchmod 755 run.sh ./run.sh./run.sh n sh sh 文件名文件名 sh run.shsh run.sh p 文件开头指定一个或多个解释脚本程序的文件开头指定一个或多个解释脚本程序的shellshell,如,如 #!/bin/bash#!/bin/bash n 如果指定,注意如果指定,注意/bin/bin不要漏了不要漏了“/”/”,否则用,否则用././ 方式执行会找不到路径。方式执行会找不

26、到路径。 1.1. 不指定的话一般默认以不指定的话一般默认以/bin/sh/bin/sh执行执行shellshell脚本脚本 .2222 3、Shell的一般结构的一般结构 shell 类型类型 函数函数 主过程主过程 一般模板一般模板 abc.sh #!/bin/bash shell类型类型 #a simple shell script example #a function funciton sayhello() 函数函数 echo Enter Your name: read name 读取来自键盘输入的变量读取来自键盘输入的变量 echo Hello $name echo program

27、me starts here. 主过程主过程 sayhello echo programme ends. .2323 1 1、注释符、注释符# # 除了除了#!/bin/bash#!/bin/bash里的里的# #特殊特殊 2 2、美元符、美元符 $ $ 变量符。与反斜杠转义符相反,使其后的普通字符作变量符。与反斜杠转义符相反,使其后的普通字符作 为变量名,如为变量名,如$a$a表示变量表示变量a a的值。变量字符长度超的值。变量字符长度超 过过1 1个时,用个时,用括起来括起来 3 3、单引号、单引号 被引起的字符全部做普通字符,即全部原样被引起的字符全部做普通字符,即全部原样 echo m

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

29、ME系统变量系统变量 .2525 练习一下:区别下面几句练习一下:区别下面几句 n echo my home is $HOMEecho my home is $HOME n echo “my home is $HOME”echo “my home is $HOME” n echo my home is $HOMEecho my home is $HOME n echo “my home is pwd”echo “my home is pwd” n echo my home is pwdecho my home is pwd 用于括起来用于括起来shell命令命令 用于原样显示用于原样显示 .2

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

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

32、的 (比如(比如PATHPATH、HOME)HOME)。是系统环境的一部分,不必去定义它。是系统环境的一部分,不必去定义它 们,可以在们,可以在shellshell程序中使用它们程序中使用它们 。还能在。还能在shellshell中加以修中加以修 改。改。 n内部变量内部变量 由系统提供的。与环境变量不同,但用户不能由系统提供的。与环境变量不同,但用户不能 修改它们。修改它们。 .2828 本地变量和环境变量的对比本地变量和环境变量的对比 .2929 1 1、本地变量(局部变量、用户变量)、本地变量(局部变量、用户变量) u本地变量本地变量 在用户现在的在用户现在的shell生命期的脚本中使用

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

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

35、注意:namename前没有前没有$)$) 显示本地所有变量显示本地所有变量 setset .3333 u设置只读变量设置只读变量 设置变量时,不想再改变其值,可以将之设为只读变量设置变量时,不想再改变其值,可以将之设为只读变量 变量名变量名=值值 readonly 变量名变量名 .3434 2 2、环境变量、环境变量 环境变量用于所有用户进程(通常称为子进程)。登陆进程称环境变量用于所有用户进程(通常称为子进程)。登陆进程称 为父进程,通过为父进程,通过pstree可以查看可以查看 u环境变量可以用于所有子程序,着包括编辑器、脚本和应用环境变量可以用于所有子程序,着包括编辑器、脚本和应用 举

36、例:举例:vi a.sh #!/bin/bash # 检测环境变量检测环境变量 echo 家目录是家目录是 $HOME u 环境变量可以在命令行中设置,但用户注销时这些值将丢失环境变量可以在命令行中设置,但用户注销时这些值将丢失 u 环境变量均为大写环境变量均为大写 u 必须用必须用export命令导出命令导出 .3535 n 设置环境变量设置环境变量 p variable-name=valuevariable-name=value p export variable-name( export variable-name(环境变量名大写环境变量名大写) ) n 显示环境变量显示环境变量 p e

37、nv env 可以看到所有的环境变量可以看到所有的环境变量 p echo $echo $环境变量名环境变量名 (显示一个变量)(显示一个变量) n 清除环境变量清除环境变量 p unset unset 环境变量名环境变量名 .3636 uHOME HOME : 代表使用者的家目录。代表使用者的家目录。cd cd 去到使用者的家目录去到使用者的家目录 或者利用或者利用 cd cd 就可以直接回到使用者家目录了。就可以直接回到使用者家目录了。 uPS1PS1:shellshell的主提示符的主提示符 u SHELL SHELL : 目前这个环境使用的目前这个环境使用的 SHELL SHELL 是哪

38、个程序?是哪个程序? 如果是如果是 bash bash 的的 话,预设是话,预设是 /bin/bash/bin/bash uPWDPWD:用户当前工作目录的路径。它指出用户目前在:用户当前工作目录的路径。它指出用户目前在LinuxLinux文件系统中处文件系统中处 在什么位置。它是由在什么位置。它是由LinuxLinux自动设置的自动设置的 u HISTSIZE HISTSIZE : 这个与这个与“历史命令历史命令”有关,曾经下达过的指令可以被系统有关,曾经下达过的指令可以被系统 记录下来,而记录的记录下来,而记录的“数目数目”则是由这个值来设定的。则是由这个值来设定的。 u ENV ENV

39、: 这个使用者所使用的个性化环境设置文件的读取文件。这个使用者所使用的个性化环境设置文件的读取文件。 uMAIL MAIL : 当我们使用当我们使用 mail mail 这个指令在收信时,系统会去读取的邮件信这个指令在收信时,系统会去读取的邮件信 箱文件箱文件 (mailbox)mailbox)。 u PATH PATH : 就是执行文件搜寻的路径,目录与目录中间以冒号就是执行文件搜寻的路径,目录与目录中间以冒号(:)(:)分隔,分隔, 由于文件的搜寻是依序由由于文件的搜寻是依序由 PATH PATH 的变量内的目录来查询,所以,目录的顺的变量内的目录来查询,所以,目录的顺 序也是重要的喔。序

40、也是重要的喔。 uLANG LANG : 语系文件,很多数据都会用到他,当出现编码错误的时候往往语系文件,很多数据都会用到他,当出现编码错误的时候往往 需要设置它,中文编码是需要设置它,中文编码是zh_CN.UTF8zh_CN.UTF8 .3737 PATHPATH示例示例 n 举例:配置举例:配置javajava环境变量可使任何目录都能执行环境变量可使任何目录都能执行javacjavac命令命令 (1 1)需要配置)需要配置JavaJava环境变量环境变量 u JAVA_HOME(JDKJAVA_HOME(JDK存放的路径)存放的路径) u CLASSPATH CLASSPATH(字节码的位

41、置,让(字节码的位置,让JVMJVM知道要运行的类的字节码放在知道要运行的类的字节码放在 哪)哪) u PATH ( PATH (让让OSOS找到找到javacjavac等命令的存放的位置)等命令的存放的位置) (2 2)在)在LinuxLinux下配置它们下配置它们 u 打开终端打开终端 u vi .bash_profilevi .bash_profile u 在配置文件中追加内容在配置文件中追加内容 JAVA_HOME=JDKJAVA_HOME=JDK存放位置存放位置 CLASSPATH=.(CLASSPATH=.(当前目录)当前目录) PATH=$JAVA_HOME/BIN:$PATH(

42、PATH=$JAVA_HOME/BIN:$PATH(不覆盖原来的内容,追加)不覆盖原来的内容,追加) export JAVA_HOME CLASSPATH PATHexport JAVA_HOME CLASSPATH PATH u 保存,让配置起作用(保存,让配置起作用(source .bash_profilesource .bash_profile或者注销或者注销) .3838 让环境变量的修改在退出让环境变量的修改在退出shellshell再次登录时仍有效,再次登录时仍有效, 需要在相关配置文件中修改需要在相关配置文件中修改 BashBash的初始化文件有:的初始化文件有:/etc/pro

43、file/etc/profile、/.bash_profile/.bash_profile、 /.bash_login/.bash_login、/.profile/.profile、/.bashrc/.bashrc、/etc/bashrc/etc/bashrc /etc/profile /.bash_profile /.bashrc /etc/bashrc /.bash_login /.profile .3939 n /etc/profile /etc/profile 存放一些全局(共有)变量,不管哪个用户,登录时都存放一些全局(共有)变量,不管哪个用户,登录时都 会读取该文件。通常设置一些会

44、读取该文件。通常设置一些ShellShell变量变量PATH,USER,HOSTNAMEPATH,USER,HOSTNAME和和 HISTSIZEHISTSIZE等等 n /.bash_profile:/.bash_profile:每个用户都可使用该文件输入专用于自每个用户都可使用该文件输入专用于自 己使用的己使用的shellshell信息信息, ,当用户登录时当用户登录时, ,该文件仅仅执行一次该文件仅仅执行一次! ! 默认情况下默认情况下, ,他设置一些环境变量他设置一些环境变量, ,执行用户的执行用户的.bashrc.bashrc文件文件 . . n /.bashrc:/.bashrc:

45、该文件包含专用于你的该文件包含专用于你的bash shellbash shell的的bashbash信息信息, , 当登录时以及每次打开新的当登录时以及每次打开新的shellshell时时, ,该该文件被读取该该文件被读取. . n /etc/bashrc:/etc/bashrc:为每一个运行为每一个运行bash shellbash shell的用户执行此文件的用户执行此文件. . 当当bash shellbash shell被打开时被打开时, ,该文件被读取该文件被读取. . .4040 上述配置文件的作用上述配置文件的作用 1 1)登录)登录LinuxLinux先启动系统配置文件先启动系统

46、配置文件/etc/profile/etc/profile,并从,并从 /etc/profile.d/etc/profile.d目录的配置文件中搜集目录的配置文件中搜集shellshell的设置,的设置, 为系统的为系统的每个用户每个用户设置环境信息。设置环境信息。 2 2)用户配置文件)用户配置文件/.bash_profile/.bash_profile,每个用户,每个用户专用于自专用于自 己使用己使用的的shellshell信息信息, ,仅用户仅用户登录时执行一次登录时执行一次! ! 默认情况下默认情况下, ,此文件通过脚本执行同目录下用户的此文件通过脚本执行同目录下用户的 .bashrc.

47、bashrc文件。文件。 3 3)/.bashrc/.bashrc文件包含专用于用户文件包含专用于用户bash shellbash shell的的bashbash信信 息息, ,登录及每次打开新的登录及每次打开新的shellshell时都会执行时都会执行。里面又会。里面又会 调用调用/etc/bashrc/etc/bashrc .4141 设置用户自己的环境变量设置用户自己的环境变量 n 在在/home/user/.bash_profile/home/user/.bash_profile中定义下句,会怎样?中定义下句,会怎样? alias la=ls a|grep “.alias la=ls

48、a|grep “.* *” 答:答:useruser下次再登陆,其下次再登陆,其shellshell会自动建立一个别名会自动建立一个别名 命令命令lala,功能为查看当前目录下名字以,功能为查看当前目录下名字以. .开头的文开头的文 件。件。 p写在写在/.bash_profile/.bash_profile中,需重新登录才能有效。中,需重新登录才能有效。 除非运行除非运行source .bash_profilesource .bash_profile使其立即有效。使其立即有效。 p写在写在/.bashrc/.bashrc中,则打开新的终端中就有效中,则打开新的终端中就有效 n 区别:区别:b

49、ash_profilebash_profile只在会话开始的时候读取一次,只在会话开始的时候读取一次, 而而bashrcbashrc则每次打开终端时都会读取则每次打开终端时都会读取 n 按照传统,定义的变量如按照传统,定义的变量如PATHPATH放到放到.bash_profile.bash_profile中,中, 而像别名函数等放在而像别名函数等放在.bashrc.bashrc中,但是中,但是.bash_profile.bash_profile 先于先于.bashrc.bashrc读取内容,也可全放入读取内容,也可全放入.bashrc.bashrc中中 习惯用各自的配置文件,编辑不需要习惯用各

50、自的配置文件,编辑不需要root权限权限 .4242 3 3、内部变量、内部变量 内部变量是内部变量是LinuxLinux所提供的一种特殊类型的变量,所提供的一种特殊类型的变量, 这类变量在程序中用来作出判断。在这类变量在程序中用来作出判断。在shellshell程序内程序内 这类变量的值是不能修改的。这类变量的值是不能修改的。 部分内部变量是:部分内部变量是: u$# $# 传送给传送给shellshell程序的位置参数的数量程序的位置参数的数量 u$?$?最后命令的完成码或者在最后命令的完成码或者在shellshell程序内部执程序内部执 行的行的shellshell程序(返回值)程序(返

51、回值) u$0shell$0shell程序的名称程序的名称 u$ $* *调用调用shellshell程序时所传送的全部参数的单字程序时所传送的全部参数的单字 符串,符串, “参数参数1”“1”“参数参数2”2”形式保存的参数形式保存的参数 .4343 u$“参数参数1”“1”“参数参数2”2”形式保存的参形式保存的参 数数 u$n$n第第n n个参数个参数 u$本程序的本程序的PIDPID u$!$!上一个命令的上一个命令的PIDPID .4444 使用使用shellshell预定义变量的脚本举例预定义变量的脚本举例 .4545 4 4 位置参数位置参数 (1 1) 位置参数及引用位置参数及

52、引用 可以编写一个可以编写一个shellshell脚本,当从命令行或者从其他脚本,当从命令行或者从其他shellshell 脚本中调用它的时候,这个脚本接收若干参数。这些选项是脚本中调用它的时候,这个脚本接收若干参数。这些选项是 通过通过LinuxLinux作为位置参数(作为位置参数(positional parameterpositional parameter)提供给)提供给 shellshell程序的。在程序的。在shellshell脚本中应有变量,接收实参,这类变脚本中应有变量,接收实参,这类变 量的名称很特别,分别是量的名称很特别,分别是1 1,2 2,3 3,这类变量称为位置,这类

53、变量称为位置 变量。位置参数变量。位置参数1 1存放在位置变量存放在位置变量1 1中,位置参数中,位置参数2 2存放位置存放位置 变量变量2 2中,中,在程序中可以使用,在程序中可以使用$1$1,$2$2,来访问,来访问, 举例:举例: .4646 (2 2) 用用setset命令为位置参数赋值命令为位置参数赋值 在在shellshell程序中可以利用程序中可以利用setset命令为位置参数赋值或重命令为位置参数赋值或重 新赋值。新赋值。 一般格式:一般格式: set set 参数表参数表 说明:该命令后面无参数时,将显示系统中的系统变说明:该命令后面无参数时,将显示系统中的系统变 量的值;如

54、果有参数将分别给位置参数赋值。量的值;如果有参数将分别给位置参数赋值。 .4747 四、变量表达式四、变量表达式 1 1、条件判断命令、条件判断命令testtest test n1 -test n1 -参数参数 n2n2(或(或 参数参数 表达式)表达式) 真返回真返回0 0,假返回,假返回1 1。 (1 1)整数,比较运算符见右表)整数,比较运算符见右表 test 1test 1 lt lt 4 4 # #判断判断1410 4 4、其他参数、其他参数 -a-a 逻辑与逻辑与 -o-o 逻辑或逻辑或 ! 逻辑非逻辑非 .5151 3 3、控制流程、控制流程 n shellshell运算符和运算

55、符和C C语言基本类似,也有分支、语言基本类似,也有分支、 循环流程控制。循环流程控制。 n 简单举例简单举例 后面例子涉及的命令后面例子涉及的命令 p seqseq命令:产生命令:产生1-91-9的数字序列的数字序列 比如比如 seq 1 4seq 1 4 p exprexpr命令:对表达式求值命令:对表达式求值 p 直接求值命令:对被括起来的表达式求值直接求值命令:对被括起来的表达式求值 .5252 表达式求值:表达式求值: $ expr 1 + 3$ expr 1 + 3 $ expr 2 1$ expr 2 1 $ expr 1 $ expr 1 * * 3 3 使用使用* *要加转义

56、符要加转义符 $ echo expr 1 + 3$ echo expr 1 + 3 注意:表达式中,数字和运算符指教要有空格,出现在注意:表达式中,数字和运算符指教要有空格,出现在 语句中要加反引号语句中要加反引号 .5353 1 1)分支结构)分支结构 n ifif分支分支 if if $# -eq 0 $# -eq 0 thenthen echo “echo “输入了输入了0 0个参数个参数” elif elif $# -lt 1 $# -lt 1 then echo “then echo “输入了多个参数输入了多个参数” else echo “else echo “输入了输入了1 1个参

57、数个参数” fifi n casecase case “$#” case “$#” inin 0 0) ) echo “ echo “输入了输入了0 0个参数个参数” ; 1 1) ) echo “ echo “输入了输入了1 1个参数个参数” ; * *) ) echo “ echo “输入了多个参数输入了多个参数”; esacesac 每个分支条件后必须以两每个分支条件后必须以两 个分号结尾个分号结尾 .5454 2 2)循环结构)循环结构 n for for 例子例子输出输出100100内内1010的倍数的倍数 for i in seq 1 9for i in seq 1 9 dodo

58、echo expr $i echo expr $i * * 10 10 donedone 或写或写 echo $(expr $i echo $(expr $i * * 10) 10) n乘号前加转义符,乘号前加转义符, 与数字间要有空格。与数字间要有空格。 .5555 n read read 变量变量1 1 变量变量2 2 p可以从键盘上读取多个变量的值,用户输入数据时可以从键盘上读取多个变量的值,用户输入数据时 ,以空格或者,以空格或者TabTab键作为分隔。键作为分隔。 p如果输入的数据个数不够,则从左到右对应赋值,如果输入的数据个数不够,则从左到右对应赋值, 没有输入的变量为空;没有输入

59、的变量为空; p如果输入的数据个数超了,则从左到右对应赋值,如果输入的数据个数超了,则从左到右对应赋值, 最后一个变量被赋予剩余的所有数据。最后一个变量被赋予剩余的所有数据。 .5656 read a bread a b for i in seq $a $bfor i in seq $a $b dodo echo expr $i echo expr $i * * 10 10 donedone 输出输出a a到到b b序列数各数的序列数各数的1010倍数倍数 .5757 n whilewhile例子例子求求1 1到到100100的和的和 i=1i=1 sum=0sum=0 while $i le

60、 100 while $i le 100 dodo sum=$sum+$isum=$sum+$i i=$i+1 i=$i+1 donedone echo $sumecho $sum n :直接求值命令:直接求值命令 .5858 五五 命令结果重定向命令结果重定向 p1 1stdoutstdout标准输出标准输出 p2 2stderrstderr标准错误标准错误 n 输出重定向到文件输出重定向到文件filefile,终端上只能看到标准错误:,终端上只能看到标准错误: # #命令命令 file file n 错误重定向到文件错误重定向到文件file file ,终端上只能看到标准输出:,终端上只能

温馨提示

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

评论

0/150

提交评论