就业班 第二阶段 2401--3.27 day7 shell之流程控制

把昨天的续上

五、变量置换

命令替换
a=`date +%m%d` 
a=$(date +%m%d) 
反引号亦可用$() 代替
变量替换
一 ${parameter:-word}
若 parameter 为空或未设置,则用 word 代替 parameter 进行替换,parameter 的值不变 
# a=1
# unset b
# a=${b:-3} # echo $a
3
# echo $b
#
若 parameter 不为空,则不替换,parameter 的值不变 # unset b
#
# a=1
# b=2
# a=${b:-3} # echo $a
2
# echo $b
2
#
二 ${parameter:=word}
若 parameter 为空或未设置,则用 word 代替 parameter 进行替换,parameter 的值改变 
# a=1
# unset b
# a=${b:=3}
# echo $a
3
# echo $b
3
#
若 parameter设置了,则 不替换,parameter 的值不变
# a=1
# b=2
# a=${b:=3}
# echo $a
2
# echo $b
2
#
三 ${parameter:+word}
若 parameter 设置了,则用 word 代替 parameter 进行替换,parameter 的值不变
# a=1
# unset b
# a=${b:+3}
# echo $a
​
# echo $b
​
# a=1
# b=2
# a=${b:+3}
# echo $a
3
# echo $b 
2
#
四 ${parameter:?message}
若 
parameter 为空或未设置,则 message 作为标准错误打印出来,这可用来检查变量是否正确设置 # unset a
# ${a:?unset a}
-bash: a: unset a
变量替换-匹配截取
${变量#关键词}  若变量内容从头开始的数据符合『关键词』,则将符合的最短数据切除
${变量##关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最长数据切除
${变量%关键词}  若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据切除
${变量%%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据切除
${变量/旧字符串/新字符串} 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串替代』
${变量//旧字符串/新字符串} 若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串替代』
​
索引及切片            
[root@newrain ~]# a=12345678
[root@newrain ~]# echo ${a:5} //从第5位开始截取 
678
[root@newrain ~]# echo ${a:3:4}
4567
[root@newrain ~]# echo ${a:2:-1}
34567
[root@newrain ~]# echo ${a:2:-2}
3456
[root@newrain ~]# url=www.sina.com.cn 
[root@newrain ~]# echo ${#url} //获取变量的长度 
15
[root@newrain ~]# echo ${url} //正常显示变量 
www.sina.com.cn
变量内容的删除
[root@newrain ~]# echo ${url#*.}   从前往后,最短匹配
sina.com.cn
[root@newrain ~]# echo ${url##*.}  从前往后,最长匹配
cn
[root@newrain ~]# echo ${url%.*}   从后往前,最短匹配
www.sina.com
[root@newrain ~]# echo ${url%%.*}  从后往前,最长匹配
www
[root@newrain ~]# echo ${url#a.} 
www.sina.com.cn
[root@newrain ~]# echo ${url#*a.} 
com.cn
​
变量内容的替换
$ a=123456123789
$ echo ${a/1/}                  第一次匹配的被替换
23456123789
$ echo ${a//1/}                 全局的匹配被替换
2345623789
$ echo ${a/1/x}
x23456123789
$ echo ${a//1/x}
x23456x23789
​
例:  file=/dir1/dir2/dir3/my.file.txt
${file#*/}:  拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}: 拿掉最后一条 / 及其左边的字符串:my.file.txt 
${file#*.}:  拿掉第一个 . 及其左边的字符串:file.txt
${file##*.}: 拿掉最后一个 . 及其左边的字符串:txt
${file%/*}:  拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3 ${file%%/*}: 拿掉第一条 / 及其右边的字符串:(空值)
${file%.*}:  拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file ${file%%.*}: 拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边) 
单一符号是最小匹配;两个符号是最大匹配(贪婪匹配)。
$ a=123
$ echo ${#a} 表示$var的长度 
3
basename & dirname
basename 命令
basename 是去除目录后剩下的名字 
# 不会检测文件系统,只是取路径的最后一段,将他截取出来
例: #temp=/home/temp/1.test#base=`basename $temp`#echo $base 
结果为:1.test
dirname 是去除文件的目录名
# 不会检测文件系统,默认路径的最后一段为文件名,把它扇区
例:#temp=/home/temp/1.test#dir=`dirname $temp`#echo $dir 
结果为:/home/temp
​
dirname 获取当前脚本的路径
$( cd $( dirname $0 ) ; pwd )

六、shell编程-流程控制

shell编程-条件结构
测试
test 条件
条件为真返回 0,条件为假返回 1
[ 条件 ]
test 能够理解3种类型的表达式 
1.文件测试
2.字符串比较
3.数字比较
字符串-n STRING# -n 字符串长度不为零-z STRING# -z  字符串长度为0STRING1 = STRING2# = 判断两个字符串是否一样STRING1 != STRING2# != 判断两个字符串是否不一样
数字eq 等于       ne 不等于  #ge 大于等于    le 小于等于   #gt 大于       lt 小于   #
文件
test-f 存在且是普通文件  # 重要-d 存在且是目录  #-h 存在且是符号链接 -b 块设备-c 字符设备-e 文件存在  #
shell分支if语句
流控制:
•在一个shell脚本中的命令执行顺序称作脚本的流。大多数脚本会根据一个或多个条件来改变它们的流。 
•流控制命令:能让脚本的流根据条件而改变的命令称为条件流控制命令 
•exit语句:退出程序的执行,并返回一个返回码,返回码为0正常退出,非0为非正常退出,例如: 
•exit 0
​
条件判断
If代码返回0表示真,非0为假
if语句语法如下:   1
if [ $1 -eq 1 ]
thenecho '等于1'
elif [ $1 -eq 2 ]
thenecho '等于二'
elseecho '既不等一,也不等于二'
fi
​
例:
#!/bin/bash
read -p "请输入号码: " num 
if [ $num = 1 ];thenecho "1"
elif [ $num = 2 ];thenecho "2"
else echo "输入有误!"
fi
​
例:脚本if.sh,必须在脚本后加上适当的参数脚本才能正确执行 
#!/bin/bash
if [ "$1" = "hello" ]; thenecho "Hello! How are you ?"
elif [ "$1" = "" ]; thenecho "You MUST input parameters"
elseecho "The only accept parameter is hello"
fi
​
练习(选做):
1)检测apache是否运行,如果没有运行则启动,并记录启动的时间,保存到日志中。 
2)测试ip地址主机位从2到100的机器是否存活,并把存活的机器记录到文本文件alivehost.txt内。(使用ping命令)
​
多个条件联合
逻辑与
if [ $condition1 ] && [ $condition2 ] 
if [ $condition -a $condition2 ]
if [[ $condition1 && $condition2 ]]
逻辑或
if [ $condition1 ] || [ $condition2 ] 
if [ $condition -o $condition2 ]
if [[ $condition1 || $condition2 ]]
# test 和 [] 中 我们可以使用 [ $condition1 ] && [ $condition2 ] 或者 [ $condition -a $condition2 ]
​
# 在 [[]] 这种情况,我们可以直接使用[[ $condition1 && $condition2 ]]
建议在if中直接使用[[]]这种方式,这种方式更加稳定。[[]] shell的一个命令。
-a &&  逻辑与 and 两端的条件都可以成立
-o ||  逻辑或 or  两端的条件有一段成立就行
​
练习:
编写脚本port.sh,执行脚本后显示系统的httpd、ftp、ssh、sendmail这些服务是否开启
​
case
case 语句是 shell 中流控制的第二种方式,语法如下: 
case $word inpattern1)list1;; pattern2)list2;; patternN)listN;;*)list*;; 
esac
命令;;表明流应该跳转到case语句的最后,类似C语言中的break指令。
练习:建立脚本case.sh,当执行时,要求我们在键盘输入适当的值(one|two|three),当输入正确时并打印,当输入错误 时会提示你,应该输入正确的值。
作业1
作业
1. ping主机测试
2. 判断一个用户是否存在
3. 判断当前内核主版本是否为3,且次版本是否大于10
4. 判断vsftpd软件包是否安装,如果没有则自动安装 (yum是否能用,不能用自动修复,安装完成测试以下,是否能用。)
5. 判断httpd是否运行
6. 判断指定的主机是否能ping通,必须使用$1变量
7. 报警脚本,要求如下:根分区剩余空间小于20%内存已用空间大于80%向用户alice发送告警邮件配合crond每5分钟检查一次echo "邮件正文" | mail -s "邮件主题" alice 可以报警
8. 判断用户输入的是否是数字 
read -p "请输入:" get
case $get in 
[0-9][0-9]*)     #判断输入是否是数字echo -e "你输入是数字。\n"
;; 
*)echo -e "你输入的不是数字。\n"
;; 
esac
shell 分支case语句
case $var in
模式1)执行1;;
模式2)执行2;;
模式3)执行3;;
*)执行4
esac
​
第一行: 声明case关键字调用case语法, 紧跟的“变量”一般为用户的输入值, in代表从下方的各个模式进行匹配 
第2-4行: 匹配到“模式1”后进行命令的输出或执行, 模式1: 一般为字符或数值
第11-12行: 当用户输入的字符不存在匹配模式时, 直接执行或打印*)下的命令或语句

示例:

[root@bavdu shell_scripts]# vim system_tools
#!/usr/bin/env bash
cat <<-EOF 
+-------------------------------------------------------------------------+ 
|                             System_tools V1.0                           | 
+-------------------------------------------------------------------------+
|                     a. Stop And Disabled Firewalld.                     |
|                     b. Disabled SELinux Secure System.                  |
|                     c. Install Apache Service.                          |
|                     d. Quit                                             | 
+-------------------------------------------------------------------------+ 
EOF
echo "Please input your select: " && read var
case "$var" in"a")systemctl stop firewalld && systemctl disable firewalld;; "b")setenforce 0;; "c")yum -y install httpd httpd-tools;; "d")exit;; *)printf "请按照上方提供的选项输入!!!\n";; 
esac

补充:

`` 和 $() 可以嵌套使用

echo -e \n

  • echo: 输出字符串或变量。
  • -e: 允许解释转义字符。
  • \n: 换行符。

fgrep

写什么就匹配啥

grep 过滤的是大概

在git仓库把代码放到linux中

然后在linux中要下载

        yum -y install git

然后从图片的https连接复制

在linux中输入 git clone 链接

解释:

  • git: 这是 Git 版本控制系统的命令行工具。
  • clone: 这是 Git 的一个命令,用于克隆(或复制)一个仓库到本地

tr

以下是tr命令在Linux中的一些常见用法:

  1. 字符替换:将输入流中的某些字符替换为其他字符。例如,将小写字母替换为大写字母:

bash复制代码
                        echo "hello, world!" | tr 'a-z' 'A-Z'

                        这将输出:HELLO, WORLD!
2. 删除字符:使用-d选项删除文本中的某些字符。例如,删除文本中的所有数字:

bash复制代码
                        echo "abc123def456" | tr -d '0-9'

这将输出:abcdef
3. 压缩字符:使用-s选项将文本中连续重复的字符压缩为一个字符。例如,压缩文本中的连续空格:

bash复制代码

                        echo "hello world" | tr -s ' '

这将输出:hello world

请注意,当不提供字符集2时,tr命令将按照字符集1中字符的顺序删除这些字符。

此外,tr命令还可以与文件一起使用,对文件内容进行字符替换、删除或压缩操作。例如,使用以下命令将文件file.txt中的小写字母替换为大写字母:

bash复制代码


tr 'a-z' 'A-Z' < file.txt

这将把file.txt中的小写字母替换为大写字母,并将结果打印到标准输出流。

总之,tr命令在Linux中提供了强大的字符处理功能,能够方便地执行字符替换、删除和压缩操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/572060.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【完整版!YOLOv9论文翻译】

目录 摘要1 引言2 相关工作2.1 实时目标检测2.2 可逆架构2.3 辅助监督 3 问题陈述3.1 信息瓶颈原理3.2 可逆函数 4 方法4.1 可编程梯度信息&#xff08;PGI&#xff09;4.1.1 辅助可逆分支4.1.2 多层次辅助信息 4.2 通用高效层聚合网络 Generalized ELAN 5 实验5.1 实验设置5.2…

【MySQL】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

定义 Item 字段的属性选项

Item 在 IRIS 中的作用和我们关系数据库中有关字段的作用的相同的&#xff0c;可以通过定义 Item 的属性&#xff0c;我们可以知道我们的可以存储什么的数据&#xff0c;以及数据之间有什么关系。 Item number 每一个 Item 都会有一个 ID&#xff0c;这个 ID 是为唯一在数据库…

动态规划标题

题目&#xff1a;猫粮规划 每种食物都有两种状态&#xff0c;记忆化dfs当然可以&#xff0c;但是你是否觉得这个题很想之前讲过的“小A点菜 ”&#xff1f;那道题问的是对于那些菜要花光她的钱&#xff0c;一共有多少方案&#xff1f;这道题问的是一个区间罢了&#xff0c;那么…

二、Web3 学习(区块链)

区块链基础知识 一、基础知识1. 区块链可以做什么&#xff1f;2. 区块链的三个特点 二、区块链的类型概括1. PoW2. PoS3. 私有链和联盟链 三、智能合约1. 什么是智能合约2. 如何使用智能合约 四、困境1. 三难选择的基本要素2. 这真的是一个三难选择吗? 五、比特币1. 什么是比特…

PTA L2-037 包装机

一种自动包装机的结构如图 1 所示。首先机器中有 N 条轨道&#xff0c;放置了一些物品。轨道下面有一个筐。当某条轨道的按钮被按下时&#xff0c;活塞向左推动&#xff0c;将轨道尽头的一件物品推落筐中。当 0 号按钮被按下时&#xff0c;机械手将抓取筐顶部的一件物品&#x…

Spring学习——什么是循环依赖及其解决方式

文章目录 前言一、什么是循环依赖二、解决思路1、循环依赖分类2、对象初始化步骤及对象分类3、spring是如何解决的4、图解5、三级缓存1、区别2、ObjectFactory是什么 三、源码debug1、spring创建对象过程1、dubug第一步——找到getBean2、dubug第二步——getBean与doGetBean3、…

MySQL高阶SQL语句

文章目录 MySQL高阶SQL语句MySQL常用查询1、按关键字排序1.1 语法1.2 ASC和DESC1.3 对数据表中信息进行排序1.3.1 普通排序1.3.2 结合where进行条件过滤1.3.3 对多个字段进行排序 2、区间判断及查询不重复记录2.1 and/or —— 且/或2.1.1 普通查询2.1.2 嵌套/多条件查询 2.2 di…

Linux基础IO(操作系统层面理解文件)

目录 一、认识 open 函数 1.1 理解文件 1.2 open 函数 1.3 函数选项和宏 二、 open 函数的返回值 三、 fd 的本质 3.1 各部分内容及关系 3.2 如何确定进程对应文件 四、Linux 一切皆文件&#xff1f; 一、认识 open 函数 在C语言中学习文件操作时&#xff0c;我们学…

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i、EuRoC 和 TUM-VI 运行测试

【ORB-SLAM3】在 Ubuntu20.04 上编译 ORM-SLAM3 并使用 D435i、EuRoC 和 TUM-VI 运行测试 1 Prerequisites1.1 C11 or C0x Compiler1.2 Pangolin1.3 OpenCV1.4 Eigen3 2 安装 Intel RealSense™ SDK 2.02.1 测试设备2.2 编译源码安装 (Recommend)2.3 预编译包安装 3 编译 ORB-S…

【C语言】C语言基础习题详解(牛客网)二分查找逻辑

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;C语言_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.三目运算符的使用 三目运算符&#xff0c;即a>b?a:b类型的&#xff0c;很多时候适当的使用三目运算符可以使得代码更简洁有序&…

4个AI智能写作平台,为你解决文章写作问题

在信息时代&#xff0c;写作是一项重要的技能&#xff0c;无论是在学术领域还是商务环境中。然而&#xff0c;对于许多人来说&#xff0c;写作并不是一件轻松的事情。但是&#xff0c;随着人工智能的发展&#xff0c;有许多AI智能写作平台可以帮助我们解决文章写作问题。在本文…