就业班 第二阶段 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  字符串长度为0
     STRING1 = 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 ]
then
      echo '等于1'
elif [ $1 -eq 2 ]
then
            echo '等于二'
else
            echo '既不等一,也不等于二'
fi
​
例:
#!/bin/bash
read -p "请输入号码: " num 
if [ $num = 1 ];then
        echo "1"
elif [ $num = 2 ];then
                echo "2"
else 
                echo "输入有误!"
fi
​
例:脚本if.sh,必须在脚本后加上适当的参数脚本才能正确执行 
#!/bin/bash
if [ "$1" = "hello" ]; then
        echo "Hello! How are you ?"
elif [ "$1" = "" ]; then
                echo "You MUST input parameters"
else
                echo "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 in
     pattern1)
                        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中提供了强大的字符处理功能,能够方便地执行字符替换、删除和压缩操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSH配置公钥私钥免密登录——windows to linux

SSH配置公钥私钥免密登录——windows to linux SSH的安全机制一、修改远程主机ssh设置二、在windows客户端生成公钥私钥文件三、将客户端公钥追加到远程主机 .ssh/authorized_keys中参考链接 SSH的安全机制 SSH之所以能够保证安全&#xff0c;原因在于它采用了非对称加密技术(…

【网安小白成长之路】2.PHP与MySQL交互

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

力扣Lc22--- 459. 重复的子字符串(java版)-2024年3月27日

1.题目描述 2.知识点 &#xff08;1&#xff09; 在Java中&#xff0c;.repeat(i) 是一个字符串方法&#xff0c;用于将原始字符串重复 i 次。 例如&#xff0c;对于字符串 “ab”&#xff0c;使用 .repeat(3) 将会返回 “ababab”。 public class RepeatExample {public s…

区块链技术与大数据结合的商业模式探索

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 随着区块链技术和大数据技术的不断发展&#xff0c;两者的结合为企业带来了新的商业模式…

WordPress建站:打造您的网站的绝佳选择

前不久&#xff0c;我们遇到一些Hostease客户咨询如何可以快速搭建网站。我们通常推荐客户使用wordpress建站。WordPress建站是指利用WordPress这套免费开源的建站系统来构建网站。类比于电脑软件&#xff0c;安装WordPress后即可轻松搭建网站&#xff0c;其优势不言而喻。 SEO…

DBeaver修改sql语句保存位置

1、dbeaver通过工作空间方式来管理Script的sql脚本以及数据库连接。 工作空间&#xff0c;其实也就是一个文件夹 默认保存路径查看&#xff1a; 文件--> 切换工作空间 --> 其他 sql脚本的保存位置默认在工作空间下的 \General\Scripts 文件夹中。 2、 3、点击浏览&#…

HTML(三)---【列表、表格、块元素、行元素的使用】

零.前言 本文主要介绍列表、表格、块内元素、行内元素。 前置知识及常见标签使用&#xff0c;请见前章&#xff1a; HTML&#xff08;一&#xff09;---【基础】-CSDN博客 HTML&#xff08;二&#xff09;---【常见的标签使用】-CSDN博客 一.<li>表内列表项 1.定义…

C语言例4-14:从键盘输入小写字母转换成大写字母并输出。

代码如下&#xff1a; //从键盘输入小写字母转换成大写字母并输出。 #include<stdio.h> int main(void) {char c1,c2;printf("输入小写字母&#xff1a; \n");c1 getchar(); //从键盘输入一个字符putchar(c1);printf(",%d\n",c1);c2 c1-32; …

Java智慧工地源码 智慧工地的价值体现 开发一套智慧工地系统需要多少钱

智慧工地是智慧地球理念在工程领域的行业具现&#xff0c;是一种崭新的工程全生命周期管理理念。它运用信息化手段&#xff0c;通过三维设计平台对工程项目进行精确设计和施工模拟&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生…

【射频连接器】RF Jack Plug Female Male Socket Pin

SMA Jack Female (Socket) SMA Plug Male (Pin) 总结&#xff1a; 中间是针的plug插头&#xff1b; 中间是孔的jack 插座&#xff1b;以上是一般的正常逻辑&#xff1b; 你说有没有 Jack Male &#xff1f;Plug Female? 嗯&#xff1f; 有的 Jack Male Plug Female

力扣面试150 删除有序数组中的重复项 双指针

Problem: 26. 删除有序数组中的重复项 思路 &#x1f469;‍&#x1f3eb; 三叶题解 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class Solution {public int removeDuplicates(int[] nums) {int j 0, n nums.length;for(int i 0;…

【数学】 【分数】 【字符串】972. 相等的有理数

本文涉及知识点 数学 分数 字符串 LeetCode972. 相等的有理数 给定两个字符串 s 和 t &#xff0c;每个字符串代表一个非负有理数&#xff0c;只有当它们表示相同的数字时才返回 true 。字符串中可以使用括号来表示有理数的重复部分。 有理数 最多可以用三个部分来表示&…

后端代码1

// 新增 public JsonResultVo<?> create(ApiIgnore RequestAttribute(ConstVal.REQ_USER) BaseUser baseUser,RequestBody IUTradeBuyPreserveVo iuTradeBuyPreserveVo) {//权限判断if (!baseCompanyService.dataPermission(baseUser, iuTradeBuyPreserveVo.getCompanyi…

JavaScript、ES6与微信小程序之间的联系:工具箱、升级与新房子

JavaScript、ES6和微信小程序三者之间有什么联系&#xff1f;我想&#xff0c;作为初学者还是有点蒙。下面作一个简单的分析&#xff0c;供大家参考。 首先,我们可以把JavaScript想象成一个非常强大的工具箱,里面装满了各种各样的工具。这些工具可以帮助我们完成各种任务,比如…

红外遥控NEC协议

红外遥控技术在我们的日常生活中应用非常广泛&#xff0c;比如我们的遥控器。通过遥控器发射红外光&#xff0c;电视&#xff0c;空调装有红外接收管&#xff0c;负责接受红外光。那么本节将重点介绍其中的原理。 一、工作原理 上图的HS0038便是装在空调&#xff0c;电视上的红…

Leo赠书活动-20期 《一本书掌握数字化运维方法,构建数字化运维体系》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

KingSCADA|如何以要求格式显示日期星期时间

哈喽,你好啊,我是雷工! 在做SCADA项目时,难免需要显示日期星期时间,如何通过系统变量转换为客户要求的格式显示。 下面以“YYYY-MM-DD 星期* 时:分:秒”的格式为例,介绍如何实现任意格式显示。 (一)效果演示 以下为以“YYYY-MM-DD 星期* 时:分:秒”的格式显示日期…

pytest教程-20-初识插件

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节&#xff0c;我们学习了pytest.ini配置文件的使用方法&#xff0c;本小节我们讲解一下pytest的插件功能。 pytest 插件为测试框架提供了额外的功能和扩展&#xff0c;使得测试过程更加强大、灵活和易于管…

IRIS / Chronicles 数据库结构

对于我们用得最多的关系型数据库来说&#xff0c;首先有的是数据库名字&#xff0c;然后是表名字&#xff0c;然后就是字段名&#xff0c;随后就是一条一条的数据。 对于 IRIS 来说&#xff0c;因为是使用的层级数据库&#xff0c;所以上面的定义就不能完全的照搬了&#xff0…

指针知识大礼包,让你的编程之路更顺畅(三)

1. 字符指针变量 2. 数组指针变量 3. ⼆维数组传参的本质 4. 函数指针变量 5. 函数指针数组 6. 转移表 正文开始 1. 字符指针变量 在指针的类型中我们知道有⼀种指针类型为字符指针char* ; ⼀般使⽤: int main(){char ch w;char *pc &ch;*pc w;return 0; 还…