View
2
Download
0
Category
Preview:
Citation preview
第 5 章 Shell脚本及应用
1.vim简介
vim下三种操作模式:
Normal Mode
Insert Mode
Ed Mode
Normal Mode(默认模式 )
左 /右 /上 / 下键: 光标向左右上下移动
数字 +左 /右 /上 / 下键: 光标向左右上下移动数字指定的行/列数
0 : 光标移动到这一行的最前面字符处
$ : 光标移动到这一行的最后面字符处
gg : 移动到文件的第一行
G : 移动到文件的最后一行
dd : 删除光标所在的那一整行
ndd : n为数字,从光标位置开始,删除向下 n行。
Insert Modei:在当前光标所在处输入文字
Ed Mode
:w 将编辑的数据写入硬盘文件中
:w! 强制写入该文件
:q 退出
:q! 若修改过该文件,又不想保存,可用该命令强制退出,
且不保存修改
:w [文件名 ] 将编辑的数据存储为另一个文件
:n1,n2 w [文件名 ] 将 n1到 n2行的内容写入到新的文件中
用户
应用程序 Shell
内核
硬件
用户2.Shell基础设置
Shell: 壳
linux:kernel(核 )
• shell 是用户和系统内核之间的接口程序• shell 是命令解释器• 在本章中, shell指 linux的终端即解释用户命令和 shell程序的文字终端
硬件
其它用户界面 用户
Shell
操作系统
图形界面
Shell是一个特殊的应用程序,用户一登录成功,就被调入内存
——交互模式 直接执行命令
——非交互模式 读取存放在文件中的命令
常用 Shell:
Bourne Shell (sh)
C Shell (csh)
执行效率有点差,多用于交互
Korn Shell (Bourne Shell超集 ) (ksh) 集合了 C shell 和 Bourne shell 的优点 并且和 Bourne shell 完全兼容
Bourne-Again Shell (Bourne shell 的扩展 ) (bash)
bash 与 Bourne shell 完全向后兼容,也包含了很多C shell 和 Korn shell 里的优点。
Shell学习什么?
Shell命令
Shell的命令集成
Shell的配置文件
Shell用户环境设定
Shell程序的控制结构
Shell脚本使用
用户使用 shell的设定–通过查看 /etc/passwd文件可以查看用户使用的 shell类型
– /etc/passwd节选
root:x:0:0:root:/root:/bin/bashbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/shsync:x:4:65534:sync:/bin:/bin/syncgames:x:5:60:games:/usr/games:/bin/shman:x:6:12:man:/var/cache/man:/bin/shlp:x:7:7:lp:/var/spool/lpd:/bin/shmail:x:8:8:mail:/var/mail:/bin/shywang:x:1000:1000:ywang,,,:/home/ywang:/bin/bash
用户名
密码:加密的密码,系统有另外的文件存放加密的密码 /etc/shadow
用户 id 组 id
描述信息 起始目录 用户登录
shell
更改用户 Shell方法:
更改 /etc/passwd文件
usermod –s [shell] [user]
• linux下的 shell–通过 cat /etc/shells命令查看安装的 shell
查看安装了哪些 Shell
安装的 Shell及路径
Bash配置文件
.bash_history 记录命令历史记录.bash_logout 退出 Shell时要执行的命令.bash_profile 登入 Shell时要执行的命令,只在会话开始时被读取一次.bashrc 每次打开新的 Shell 时要执行的命令 别名和函数之类通常放在该文件中
系统级的配置文件存储在 /etc/profile 及目录/etc/profile.d
vim配置文件
通常在 /usr/share/vim/vimrc或 /etc/vim/vimrc
syntax on :根据程序相关语法显示不同颜色
set autoindent :设置自动缩进 ,按回车后新行与上一行自动 对齐。
set tabstop=[n]:设置 TAB键缩进量 ,n为数字,描述缩进 n列
set nu:设置行号,取消行号就用: set nonusource : 用于重新执行刚修改的初始化文件,使之立即生效
,而不必注销并重新登录。语法: source [filename]
bash 的几种特性使命令的输入变得更容易: 命令补齐通配符命令历史记录输入重定向输出重定向 管道
3.命令补充
多命令执行
分号
语法: command1;command2
先执行 command1,不管 command1是否出错,继续执行
command2
&&
语法: command1 && command2
只有 command1正确运行完毕,才执行 command2 例如 :cd /${解压路径 } && ./configure && make && make install
命令替换
语法: command1 $(command2)
command1 `command2`——注意: `是后引号
例如: vim $(locate main.f) ( 先运行 sudo updatedb)
vim `locate main.f`
注: vim可以跟多个文件名
如: vim f1 f2 f3
在 Ed Mode(命令行模式 )下, :n看下一个文件 ,:N看上一个文件 :files 列出当前 vim打开的所有文件
命令延伸
一行命令太多,可以用 \来延伸至下一行在脚本中,如果一行命令太长,同样可以用 \进行连接
通配符
bash 支持三种通配符:
* 匹配任何字符和任何数目的字符 ? 匹配任何单字符
[ … , - , ! ] “按照范围 按照范围 -” “、列表 ...” 或不匹配“ !” 等形式匹配指定的字符
rm *.bak——所有以 .bak结尾的文件
rm *[!6].bak——所有以 .bak结尾,并且点号之前不为6的文件
ls *.????——所有点号后有四个字符的文件
rm *[!6]?.*——所有点号前倒数第二个字符不为 6的文件
ls [13]*——所有以 1或 3开头的文件
ls [1-3]*——所有以 1~3之间某个数字开头的文件
ls [a-d,x,y]*——所有以 a,b,c,d,x,y开头的文件
“取反的 !”必须放在 [里面 ]
通用的管道,由管道符号 |来标识。
语法是:
command1 | command2 |command3 | …
例如:分屏显示 px aux命令的执行结果
ps aux | more
输入 /输出重定向 :command > file 把 command命令的输出重定向到文件 file中 ,如果 file已经存在,则清空原有文件。command >> file 把 command命令的输出重定向到文件 file中,如果 file已经存在,则把信息加在原有文件后面。command< file 使 command命令从 file读入command << C 从命令行读取输入,直到一个与 C相同的行结束。command < file1 >file2 command命令从文件 file1读 ,输出到文件 file2
成组命令{ }形式以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边。
例如: { echo “User Report for ` date ` . ”; who ; } |
pr
注:使用花括号时在格式上应注意 : “左括号 { ”后面应有一个空格 ; “右括号 }” 之前应有一个分号 ;
4.Shell脚本简介
Shell脚本的特点及用途:Shell脚本可以认为是将 shell命令按照控制结构组织到一个文本文件中,批量的交给 shell 去执行
不同的 shell解释器使用不同的 shell命令语法Shell 脚本解释执行,不生成可以执行的二进 制文件可以帮助用户完成特定的任务,提高使用、维护
系统的效率了解 shell脚本可以更好的配置和使用 linux
脚本编译和运行过程
一般步骤:编辑文件保存文件将文件赋予可以执行的权限运行及排错
常用到的命令:vi,编辑、保存文件ls -l 查看文件权限chmod 改变程序执行权限直接键入文件名运行文件
养成良好的脚本书写习惯:
先声明适用哪种 shell
注明脚本的内容功能、版本信息、作者、文件创建日期等
每一个大步骤的主要功能
最好加个后缀 .sh,以便他人识别
脚本执行方法有两种:
更改脚本属性,将其改为可执行的属性,例如: chmod +x
scripts.sh,然后直接运行该脚本
直接以 sh命令来执行脚本的内容,例如: sh scripts.sh
test.sh
echo "Programme Ends."12
say_hello11
echo "Programme Starts Here....."10
}9
echo "Hello $name"8
read name7
echo "Enter Your Name,Please. :"6
{5
function say_hello()4
#a Function3
#a Simple shell Script Example2
#!/bin/bash1
解释
输出提示,提示程序结束
调用函数
程序开始的第一条命令,输出提示信息
函数结束
输出
读入用户的输入到变量 name
echo命令输出字符串
函数开始
以 functin 开始,定义函数
同上
以 # 开始,其后为程序注释
以 #! 开始,其后为使用的 shell
Shell脚本简单示例
一般结构shell类型
函数主过程
#!/bin/bash
function fun1(){
}
......
funciton funn(){
}
...........
.
.
.
.
.
.
函数定义
shell类型
主过程
交互式脚本
Shell下最简单的交互式命令: read
单引号:字符串双引号:引用变量
脚本的参数代号:$0 脚本的文件名$1 第一个附加参数$2 第二个附加参数$3 ......$n
5.Shell脚本语法
5.1变量命名规则
变量与变量值之间以等号 =来连接
等号两边不能直接接空格符
变量名称只能是英文字母与数字,但是数字不能做为开头字符
“ ‘若有空格符,可以使用双引号 或单引号 来将变量内容结合起来
注意:双引号内的特殊字符可以保有变量特性,但是单引号内的特殊字符则仅为一般字符
必要时需要以字符 \来将特殊字符(如: Enter , $ , \ , 空格符 , ‘等)变成一般字符
若该变量需要在其他子程序中起作用,需要以 export来使变量生效,如: export PATH
通常,大写字母的变量为系统的预设变量,自定义变量使用小写字母,以方便判断
5.2变量声明和引用
在 shell中,所有没有声明的变量都默认是呈现字符串形式。
声明变量使用 declare指令。
delcare [-afir] var=... -a 定义为数组 array -f 定义为函数 function -i 定义为整数 integer -r 定义为只读 readonly
5.3变量的引用• 格式 :
$变量名,或者 ${变量名 }变量名为一个字符用方式一,变量名多于一个字符建议用第 2中方式
• 例子:a=1abc="hello"echo $aecho ${abc}
所有没有声明的变量都默认是呈现字符串形式,所以 $a,$b,$c,$就成为字符串形式,而不会进行任何算术运算。
出现错误原因,因为使用了 sh命令运行脚本,在 bash下直接执行就可以通过
declare –r var等价于
readonly var
Recommended