第11章:Shell编程
一、正则表达式:
例子:
二、字符截取命令
1、cut 选项 文件名 cut进行列提取-f 提取第几列
-d 按照指定的分隔符分隔列
注意:上面的studebt.txt中的间隔不是“空格”,而是制表符“Tab”。
cut -f 2,4 studebt.txt
cut -d ":" -f 2,3 /etc/passwd
案例:假设我想删除当前Linux系统下的除了root外的所有可以登录的普通用户,(所有可以登录的普通用户/bin/bash):(1)先提取出来所有普通用户的用户名
cat /etc/passwd | grep "/bin/bash" | grep -v root | cut -d ":" -f 1
(2)再把提取出来的用户的用户名赋值给一个变量,用循环的方式一个一个删除。注:cut命令只能识别制表符Tab,逗号,冒号等作为间隔符的列,不能识别空格作为间隔符的列,--->因此cut符具有局限性,从而引出awk。2、printf 格式化输出命令
printf "输出类型输出格式" 输出内容%ns 字符串%ni 整数%m.nf 浮点数下面介绍几个案例:
3、awk 列截取
可以进行截取字符段、函数、判断、流程控制等强大的功能。
上图,注: $2表示第2列;\r回车 ; \t Tab ; \n换行
介绍awk中的几个常用命令:
(1)BEGIN:主要用于处理FS默认的分隔符cat /etc/passwd|grep "/bin/bash"|awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}'
(2)FS内置变量:手工定义分隔符,默认情况下awk的分隔符是Tab、空格。cat student.txt|grep -v name|awk '$6>80 {printf $2 "\n"}'
(3)ENDawk 'END {printf "The End\n"} printf $2 "\t" $6 "\n"' student.txt
4、sed 流编辑器 (以行为单位)
作用:对文件中的数据进行选取、增删改。
sed 选项 '动作'
选项:-n 只打印查询出的内容
-e 允许多个条件执行,多个条件之间用“分号”或“回车”
-i 修改了文件本身内容,不加-i并没有修改文件的内容
动作:注意,动作必须用单引号括起来!a 追加i 行之前插入p 打印输出d 删除c 替换行号s/旧字符串/新字符串/g 替换字符串
三、字符处理命令
1.排序命令sortsort 选项 文件名
选项:-f 忽略大小写
-n 以数值排序,默认以字符串
-r 反向排序
-t 指定分隔符,默认以Tab为分隔符
2.wc 选项 文件名 统计命令
选项:-l 行数
-w 单词数
-m 字符数
条件判断
两种判断格式:
法1:test -e /root/install.log
法2:[ -e /root/install.log ] 注意:[]与中间的字符串必须有空格
注解:但是每次判断完文件是否存在,我们还需要用echo $?查看文件是否存在,比较麻烦--->因此我们可以用“逻辑运算符”把两句话联系起来,见下:
[ -e /root/install.log ]&&echo "yes" || echo "no"
再例:[-d /root ]&&echo "yes" || echo "no" 判断/root是否是一个目录;如果是目录,输出yes,否则输出no
四、流程控制语句
(一)控制语句-if语句
1、单分支if条件语句if [条件判断式] ; then //需要;,和then写在一行程序fi
或者if [条件判断式] //不需要;,不和then写在一行then程序fi
2、双分支if条件语句if [条件判断式] //不需要;,不和then写在一行then条件成立时,执行的程序else条件不成立时,执行的另一个程序fi
3、多分支if条件语句if [ 条件判断式1 ]then当条件判断式1成立时,执行程序1elseif [条件判断式2]then当条件判断式2成立时,执行程序2...省略更多条件...else当所有条件都不成立时,执行此程序fi
注意:
(1)if语句使用fi结尾,和一般语言使用大括号结尾不同
(2)[条件判断式]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
(3)then后面跟符合条件之后执行的程序,可以放在[]之后,用“;”分割。也可以换行写入,就不需要“;”了。例子1:判断分区使用率#!bin/bash //标注:这个是shell脚本rate=$(df -h|grep "/dev/sda5"|awk '{printf $5}'|cut -d "%d" -f1) #统计根分区使用率,并把根分区使用率作为变量值赋给rateif [ $rate -ge 80 ]thenecho "Warning! /dev/sda3 is full!"fi
例子2:备份/var/lib/mysql数据库到/tmp/dbbak目录下#!bin/bashntpdate asia.pool.ntp.org &>/dev/null #同步系统时间date=$(date +%y%m%d) #把当前系统时间按照年月日格式赋值给变量datesize=$(du -sh /var/lib/mysql) #统计mysql数据库的大小,并把大小赋予size变量if [ -d /tmp/dbbak ] 如果/tmp/dbbak目录存在thenecho "Date:$date">/tmp/dbbak/dbinfo.txtecho "Date size:$size">>//tmp/dbbak/dbinfo.txtcd /tmp/dbbaktar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/nullrm -rf /tmp/dbbak/dbinfo.txtelsemkdir /tmp/dbbakecho "Date:$date">/tmp/dbbak/dbinfo.txtecho "Date size:$size">>//tmp/dbbak/dbinfo.txtcd /tmp/dbbaktar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/nullrm -rf /tmp/dbbak/dbinfo.txtfi
例子3:判断apache是否启动 【apache非常常用的脚本】#!/bin/bashport=$(nmap -sT 192.168.1.156|grep tcp|grep http|awk '{printf $2}') #使用nmap命令扫描服务器,并截取apache服务的状态,赋值给portif { "$port" == "open" }thenecho "$(date) http is ok!">>/tmp/autostart-acc.logelse/etc/rc.d/init.d/httpd start &>/dev/nullecho "$(date) restart http!">>/tmp/autostart-acc.log
(二)控制语句-case语句
case $变量名 in"值1")执行程序1"值2")执行程序2......*)如果以上条件不成立,执行此程序
esac
(三)流程控制-for循环
语法一:for 变量 in 值1 值2 值3do 程序done
例1:#!/bin/bashfor time in morning noon afternoon eceningdoecho "This is $time"done
例2:批量解压缩cd /lampls *.tar.gz>ls.logfor i in $(cat ls.log)dotar -zxf$i&>/dec/nulldone
语法二:for ((初始值;循环控制条件;变量变化))do程序done
例:批量添加指定数量的用户#!/bin/bashread -p "请输入用户数量:" -t 30 numread -p "请输入用户名字:" -t 30 nameread -p "请输入用户密码:" -t 30 pass if[ ! -z "$name" -a ! -z "$name" -a ! -z "$pass"]theny=$(echo $num|sed 's/^[0-9]*$//g') if [ -z "$y" ] 判断输入的num是否为数字thenfor((i=1;i<$num;i=i+1))do/usr/sbin/useradd $name$i&>/dev/nullecho $pass|/usr/bin/passwd -- stdin $name$i &>/dev/nulldonefifi
(四)while循环和until循环
1、
while [ 条件判断式 ]do程序done
2、
until 只要条件不成立,则一直循环;当条件成立时,循环终止。
until [ 条件判断式 ]do程序done
第11章:Shell编程相关推荐
- linux 【完结篇】第六章 shell编程及自动化运维--三剑客
linux 第六章 shell编程及自动化运维–三剑客 一.正则表达式 1.前言 名词解释: 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于2个正斜杠之间 ...
- c语言将pwd结果赋给变量,《网络系统管理linux实训》全套PPT电子课件教案-第4章 shell编程.ppt...
第4章shell编程 4 1shell编程简介4 2shell分类4 3shell基本语法4 4shell程序的变量和参数4 5shell的测试表达式4 6shell的控制结构4 7awk4 8sed ...
- abd shell关闭所有程序_第十六章 Shell编程
第十六章 Shell编程 16.1 shell脚本运行 所谓脚本,就是把众多命令写入一个文件中,让其按照一定的逻辑顺序执行,以完成一个具体的功能.而在Linux的shell编译环境下,shell编程与 ...
- Linux(b站视频兄弟连)自学笔记第十一章——shell编程
Linux(b站视频兄弟连)自学笔记第十一章--shell基础 正则表达式 字符截取命令 cut命令 printf命令 awk命令 sed命令 字符处理命令 判断条件 流程控制 if语句 case语句 ...
- Linux编程基础:第4章Shell编程 课后习题
<Linux编程基础>黑马程序员/编著 清华大学出版社 目录 一.填空题 二.判断题 三.单选题 四.简答题 1.分析以下脚本代码: 2.写出shell脚本中while循环与until循环 ...
- Linux编程基础案例:第4章Shell编程
案例4-1:已知/etc/passwd文件中的各项以:分隔,若使用awk命令处理/etc/passwd文件,提取其中的第1项和第3项,并使用空格分隔提取结果,则可以使用如下命令. awk -F: '{ ...
- Linux系统命令与Shell编程
第1章 linux简介 1.linux系统主要特点 免费开源.Linux是一款完全免费的操作系统,任何人都可以从网络上下载到它的源代码,并可以根据自己的需求进行定制化的开发,而且没有版权限制. 模块化 ...
- 第14章 Linux的shell编程
文章目录 文档配套视频讲解链接地址 第14章 Shell编程 14.1 Shell简介 1. **Shell交互过程** **2. 选择Shell** 2. 编译型语言与解释型语言 **14.2 sh ...
- Java编程思想学习笔记-第11章
<?xml version="1.0" encoding="utf-8"?> Java编程思想学习笔记-第11章 Java编程思想学习笔记-第11章 ...
- 运维 - 第一阶段 - linux与shell编程
linux与shell编程 讲师:墨竹 系统运维与linux 1.系统运维是什么 简单来说运维(Operation and maintenance)是指对公司硬件和软件的维护. 硬件包括:机房.机柜. ...
最新文章
- 良心贴!没想到 Google 排名第一的编程语言,可以这么简单!
- oracle修改连接数
- GBK字符集和UTF8字符集的转换C++
- Tomcat和Eclipse不同的集成方式
- jvm(2)-OutOfMemoryError 异常(内存溢出异常)
- linux性能分析top iostat vmstat free,linux 性能篇 -- top用法(示例代码)
- python函数示例_带Python示例的float()函数
- 8个日志级别(OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL)
- python语言中文怎么读-python中文读什么
- [转载] 民兵葛二蛋——第31集
- 10.这就是搜索引擎:核心技术详解 --- 网页去重
- H3C WAC360 基于Win2012 NPS 802.1x 认证
- 汉化pycharm,中文
- 2020-12-07
- Vuforia Vumark初探
- Docker-in-Docker: Jenkins CI 内部如何运行 docker
- COGS 1008 贪婪大陆
- CephFS MDS服务 高可用
- 【转载】FreeIPA中间CA证书已过期
- 去除中文版WinRAR的弹窗广告