第 13 章 学习shell script
来源:互联网 发布:linux怎样切换到root 编辑:程序博客网 时间:2024/06/11 00:04
- 1 什么是shell script
- 为什么学习 shell script
- 第一个 script 的编写与执行有以下注意事项
- 编写shell script的良好习惯
- 2简单的shell script 练习
- script的执行方式区别sourceshscriptscript
- 3善用判别式
- 利用test命令的测试功能
- 利用判断符号
- shell script的默认变量01
- 4条件判断式
- ifthen
- 利用 caseesac 判断
- 利用 function 功能
- 5循环loop
- while do doneuntil do done不定循环
- fordodone 固定循环
- fordodone的数值处理
- shell script的追踪与调试
- 1 什么是shell script
13.1 什么是shell script
shell script是利用shell的功能缩写的一个”程序”,这个程序使用纯文本文件,将shell的语法与命令(含外部命令)卸载里面,配合正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理目的。
shell script就像是早期DOS年代的批处理文件(.bat),最简单的功能就是将许多命令写在一起。
为什么学习 shell script
- 自动化管理的重要依据
- 写脚本每日自动分析如下任务:查询登录文件、追踪流量、监控用户使用主机状态、主机软件状态、主机各项硬设备状态、主机软件更新查询等
- 追踪与管理系统的重要工作
- linux系统的服务启动的接口在/etc/init.d/这个目录下,目录下的所有文件都是script。
- 简单入侵检测功能
- 当我们的系统有异常时,大多会将这些异常记录在系统记录器,也就是我们常提到的”体统注册表文件”,那么我们可以在固定的几分钟内主动去分析系统注册表文件,若察觉有问题,就立刻通报管理员,或者立刻加强防火墙的规则设置。
- 连续命令单一化
- script可以想成仅是帮我们把一大串的命令集合在一个文件里面,而直接执行该文件就可以执行那一串又臭又长的命令段
- 简单的数据处理
- 夸平台支持与学习历程较短
总结:
虽然script号称是程序,但实际上shell script处理数据的速度是不太够的。因为shell script用的是外部的命令与bash shell的一些默认工具,所以它常常会去调用外部的函数库,因此,命令周期上面肯定比不上传统的程序语言.所以shell script用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上,就不够好了.因为shell script 的速度较慢,切使用的cpu资源较多,造成主机资源的分配不良.我们通常利用 shell script 来处理服务器的检测,倒是没有进行大量运算的需求.指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。
第一个 script 的编写与执行;有以下注意事项
- 命令的执行时从上而下、从左而右第分析与执行;
- 命令、参数间的多个空白都会被忽略掉;
- 空白行也将被忽略掉,并且[tab]按键所的空白同样是为空格键;
- 如果读取到一个Enter符号(CR),就尝试开始执行改行(或该串)命令;
- 至于如果一行的内容太多,则可以使用”[Enter]”来扩展至下一行;
“#”可作为批注。任何加载#后面的数据将全部被视为批注文字而被忽略。
可以用以下方式来执行.sh的可执行文件
- 直接命令执行:绝对路径;相对路径;变量”PATH”功能(PATH路径内的可执行文件,可以在任何时候下执行)
- 以bash进程来执行:通过”bash shell.sh” 或 “sh shell.sh”来执行
关于exit: exit n
,bash就会退出脚本的执行并将n值返回给?,我们可以echo $?
来查询系统当前的返回值
编写shell script的良好习惯
每个script的文件头处记录如下信息:
- script的功能;
- script的版本信息;
- script的作者与联络方式;
- script的版本声明方式;
- script的History(历史记录);
- script内较特殊的命令,使用”绝对路径”的方式来执行;
- script执行时需要的环境变量预先声明与设置。(设置好PATH就可以在这个程序在进行时可以直接执行一些外部命令,而不必写绝对路径)
13.2简单的shell script 练习
- 第一个script
[root@www scripts]# vi sh01.sh#!/bin/bash# Program:# This program shows "Hello World!" in your screen.# History:# 2005/08/23 VBird First releasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHecho -e "Hello World! \a \n"exit 0
- 数值运算脚本:简单的加减乘除
#!/bin/bash# Program:# User inputs 2 integer numbers; program will cross these two numbers.# History:# 2016/05/10 Hanzhou First releasePATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesexport PATHecho -e "You SHOULD input 2 numbers, I will cross them! \n"read -p "first number: " firstnuread -p "second number: " secnutotal=$(($firstnu*$secnu))echo -e "\nThe result of $firstnu x $secnu is ==> $total"
- 两种数值运算方法
- $((计算式))可以用来进行数值运算(常用)
- 用
declare -i total=$firstnu*$secnu
script的执行方式区别(source,shscript,./script)
- 利用soucrce来执行脚本:在父进程中执行,不会另开一个进程。其他方式都会另开一个进程。
13.3善用判别式
利用test命令的测试功能
test -e dmtsai
检测文件dmtsai
是否存在
test的常用参数:
- 文件的判定
-e 文件名是否存在
-f 文件名是否存在且为文件
-d 文件名是否存在且为目录
test file1 -nt file2
判断file1 是否比file2新 test file1 -ot file2
判断file1 是否比file2旧 test file1 -ef file2
判断file1 与file2是否为同一个文件,可以用在判断hard link的判定上.主要意义在判定两个文件是否均指向同一个inode
两个整数之间的判定:
-eq 数值相等
-ne 数值不等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于判定字符串的数据:
-z 长度为0,返回0(true),否则返回1(false)
-n 长度不为0,返回0(true),否则返回1(false)多重条件判定
-a 同事满足(and)
-o or
! 取反test ! -x file
利用判断符号”[]”
比如我们想要知道$HOME这个变量是否为空 [-z "$HOME" ] ; echo $?
bash语法中使用中括号作为shell的判断式时,必须要注意中括号的两端需要有空格符来分隔
需要空格的位置见下例:(□代表空格) [□"HOME"□==□"$MAIL"□]
注:bash中两个变量做”判断”时,可以用一个等号,也可以用两个等号”==”
总结:
- 在中括号[]内的每个组件都需要空格键来分隔;
- 在中括号捏的变量,最好都以双引号括号起来;
- 在中括号内的常量,最好都以单或双引号括号起来。
原因:变量或常量中可能含有空格
shell script的默认变量($0
,$1
…)
示例脚本的文件名为:sh08.sh
#!/bin/bash# Program:# Program shows the script name, parameters...# History:# 2016/05/11 Hanzhou First releasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHecho "Total parameter number is ==> $#"echo "Your whole patameter is ==> '$@'"shiftecho "Total parameter number is ==> $#"echo "Your whole patameter is ==> '$@'"shift 3echo "Total parameter number is ==> $#"echo "Your whole patameter is ==> '$@'"shift
脚本执行结果见下
hanzhou@hanzhou-VirtualBox:~/main/charpter13_learn_shell_script$ bash sh08.sh 1 2 3 4 5 6 7 Total parameter number is ==> 7Your whole patameter is ==> '1 2 3 4 5 6 7'Total parameter number is ==> 6Your whole patameter is ==> '2 3 4 5 6 7'Total parameter number is ==> 3Your whole patameter is ==> '5 6 7'
shift n
意为拿掉前n个参数
13.4条件判断式
if…then
- 单层、简单条件判断式
if [条件判断式]; then 当条件判断式成立时,可以进行的命令工作内容;fi <== 结束if之意
有多个条件要判别时
- &&代表 AND;
||代表 or。
多重、复杂条件判断式
if [条件1]; then 执行内容elif [条件2]; then 执行内容else 执行内容fi
利用 case…esac 判断
其实就是我们所熟知的case when
语法如下:
case $变量名称 in"第一个变量内容") ##每个变量内容建议用双引号,关键词则为小括号程序段;; ##每个类型结尾使用两个连续的分好来处理!"第二个变量内容")程序段;;*) ##最后一个变量内容都会用*来代表所有其他值程序段exit 1;;esac
利用 function 功能
语法如下:
function fname{ 程序段}
fname就是我们的自定义的执行命令名称,而程序段就是我们要它执行的内容。
13.5循环(loop)
while do done,until do done(不定循环)
语法:
while [ condition ]do 程序段落done
unitl [ condition ]do 程序段落done
for…do…done( 固定循环 )
for var in con1 con2 con3 ...do 程序段done
for…do…done的数值处理
语法
for (( 初始值; 限制值; 执行步长))do 程序段done
shell script的追踪与调试
sh [-nvx] script.sh
参数
- -n: 不要执行script,仅查询语法问题;
- -v:执行script前,先将script的内容输出到屏幕上;
- -x:将使用到的script内容显示到屏幕加上。
- 第 13 章 学习shell script
- 第13章 学习shell script
- Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第13章 学习 shell script
- Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第10章 vim 程序编辑器
- Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第11章 认识与学习 bash
- Linux 学习笔记 -- 第三部分 学习 shell 与 shell script -- 第12章 正则表达式与文件格式化处理
- Shell Script 的学习
- 学习Shell script
- shell script学习备忘
- 学习shell script
- 学习 shell script
- Shell Script 学习整理
- shell script 学习
- 学习shell script
- Linux shell script学习
- 学习shell script
- shell script 学习记录
- Shell Script 学习笔记
- RecyclerView 下拉刷新和上拉加载
- 正确配置spring aop,在controller中使用AOP
- java实现简单的单点登录
- 半朴素贝叶斯分类器(周志华《机器学习》)
- [从头学声学] 第212节 辅音的数据
- 第 13 章 学习shell script
- 第三方支付平台:BeeCloud和Ping++对比
- 图像处理--linux opencv2多线程人脸识别
- JavaScript代码-创建交互网页
- csdn如何转载别人的文章
- Quartz2d 的Path路径
- RxJava中ActionX与FuncX的区别
- MessageDigest详解(Java自带加密)
- ECSHOP滚动或点击加载更多订单(瀑布流)JQuery.more.js