Shell编程(二)

news2024/11/27 22:40:56

上一章:

Shell编程_做测试的喵酱的博客-CSDN博客

七、ping

 shell脚本,是一个面向过程的编程语言,没有类和对象的概念。用的最多的就是函数。

查看当前服务,是否能ping通baidu

ping www.baidu.com

[root@ecs-39233 dev]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=49 time=10.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=49 time=10.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=3 ttl=49 time=10.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=4 ttl=49 time=10.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=5 ttl=49 time=10.2 ms
^C
--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 10.214/10.225/10.236/0.111 ms

在当前屏幕,会持续输出ping的内容。

我想实现,ping 只打印一行输出内容。

查看ping 的帮助文档。

ping --help

查看ping的详细介绍文档

man ping

 ping -c 可以实现打印行数的控制。 -c1打印一行, -c2打印两行

ping -c1 www.baidu.com
[root@ecs-39233 dev]# ping -c1 www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=49 time=10.2 ms

--- www.a.shifen.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 10.232/10.232/10.232/0.000 ms

八、2>&1

linux中的2>&1是什么_2&>1_康大壮的博客-CSDN博客

Linux 中 2>&1 详解_2>&1_迎风悟极道的博客-CSDN博客

8.1  1和2在Linux中的含义

在Linux系统中0 1 2是一个文件描述符:


标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示。

名称代码  Linux 下文件描述符(Debian 为例)
标准输入(stdin) 0 /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
标准输出(stdout) 1 /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
标准错误输出(stderr)2 /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0

 
其中0表示键盘输入 1表示屏幕输出 2表示错误输出。

8.2  2>&1的含义

2>&1的含义:将标准错误输出重定向到标准输出

注意:符号>&是一个整体,不可分开,分开后就不是上述含义了。

8.3 举例

8.3.1  command >/dev/null 2>&1 &

command  我们写的指令

> 重定向

/dev/null  表示空设备文件,相当于垃圾桶

2 标准错误输出

1 标准输出

2>&1的含义:将标准错误输出重定向到标准输出。注意:2>&1,中间不能有空格。

注意:符号>&是一个整体,不可分开,分开后就不是上述含义了。

command>/dev/null ,它默认等于command 1>/dev/null ,即将标准输出结果重定向到/dev/null

2>&1,  将标准错误输出重定向到标准输出 。标准输出1,已经被重定向到了/dev/null,错误输出重定向到标准输出,则错误输出也被重定向到了/dev/null

最后一个&, 是让该命令在后台执行。

8.3.2 command >out.file 2>&1 & 

command >out.file        是将command的输出重定向到out.file文件,输出内容不打印到屏幕上,而是输出到out.file文件中。
2>&1        是将标准出错重定向到标准输出,因为标准输出已经重定向到了out.file文件,所以标准出错也输出到out.file文件中。
最后一个&, 是让该命令在后台执行。  


 

九、函数

9.1 定义函数的格式

定义函数,有2种方式。

定义函数,方式一

函数名()
{
    命令1
    命令2
    ....
}

命令1,前的空格一般空四个 。

定义函数,方式二

使用function 关键字

function 函数名
{
    命令1
    命令2
    ...
}

命令1,前的空格一般空四个 。使用function 定义函数时,函数名后没有括号。

举例:

创建 study_shell.sh 

#!/bin/bash
# author: miao
# date: 2023

# 方法一,打印当前登录用户名称和时间
print_user()
{
    echo -e "Hello ${USER},date: $(date)"
}


# 方法二,打印当前路径

function print_pwd
{
    echo "$(pwd)"
}


# 调用方法一
print_user

# 调用方法二

print_pwd

注意:

调用变量的格式,${USER}

调用方法的格式, $(date)

执行 study_shell.sh 

[root@ecs-39233 chenshuai]# sh study_shell.sh 
Hello root,date: Tue Apr 18 07:31:08 CST 2023
/chenshuai

9.2  ping host 小案例

实现一个ping 功能的函数 。以www.baidu.com 为例

如何判断ping 通。我们可以通过echo $? 查看状态。

ping 一个不存在的地址

[root@ecs-39233 ~]# ping -c1 www.baidusssss.com; echo $?
ping: www.baidusssss.com: Name or service not known
2

返回非0

ping 百度,返回0

[root@ecs-39233 ~]# ping -c1 www.xxxx.com; echo $?
PING www.xxxx.com (54.153.216.130) 56(84) bytes of data.
64 bytes from ec2-54-153-216-130.ap-southeast-2.compute.amazonaws.com (54.153.216.130): icmp_seq=1 ttl=35 time=165 ms

--- www.xxxx.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 165.493/165.493/165.493/0.000 ms
0

ping -c1 www.baidu.com > /dev/null 2>&1

ping -c1 打印一行输出

> /dev/null 将标准输出,重定向到虚拟文件

2>&1 2标准错误输出,等同于>& 标准输出1。(都会重定向到/dev/null)中 

编写脚本check_host.sh

vim check_host.sh
#!/bin/bash
# author: miao
#description: check host,检查主机是否在线

function check_host
{
    ping -c1 www.baidu.com &> /dev/null
    test $? -eq 0 && echo -e "服务【www.baidu.com】正常启动" || echo -e "服务【www.baidu.com】离线状态"
}

# 调用函数
check_host

注意,脚本中 &> /dev/null 中的 &> 表示将所有的输出(标准输出和标准错误输出)全部重定向

运行脚本sh check_host.sh

[root@ecs-39233 ~]# sh check_host.sh 
服务【www.baidu.com】正常启动

 

 9.3 参数

9.2 中,ping host 案例,host是写死的。现在用传参变量代替里面的host。

函数获取参数的形式,与命令行获取参数的形式是一样的。都是通过$1 获取。

在函数的内部,使用$1 就可以获取第一个参数。$2 就可以获取第二个参数。

对 check_host.sh 进行改造。

复制一份

cp check_host.sh new_check_host.sh

修改 new_check_host.sh

vim new_check_host.sh

用变量替换里面的host

#!/bin/bash
# author: miao
#description: check host,检查主机是否在线

function check_host
{
    server_name="$1"
    host="$2"
    ping -c1 "${host}" &> /dev/null
    test $? -eq 0 && echo -e "服务【${server_name}】正常启动" || echo -e "服务【${server_name}】离线状态"
}

# 调用函数
check_host $1 $2

直接运行 new_check_host.sh  脚本

[root@ecs-39233 ~]# sh new_check_host.sh 
服务【】离线状态

使用参数,百度 www.baidu.com

[root@ecs-39233 ~]# sh new_check_host.sh 百度 www.baidu.com
服务【百度】正常启动

 

讲解脚本中的参数传递。

函数check_host 中,使用了两个变量 $1 $2(函数内部 参数)

$1 表示调用函数check_host 函数时第一个参数。

在调用check_host 的代码中。参数$1 $2 ,获取的是调用new_check_host.sh  脚本时,用户在命令行中输入的参数。

 

9.4 input

10、流程控制

10.1 if 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

眺望2023:房企“三大护法”如何助力穿越周期?

2022 年的地产行业尤为艰难,土地和商品房成交量明显下滑,许多房企的业绩都呈现收缩态势。 不过,今年以来房地产市场似乎出现企稳信号。国家统计局数据显示,今年1~2月全国商品房销售面积和销售额的下跌幅度明显收窄,住…

18-java单列集合

java单列集合1.集合体系结构1.1 单列集合1.2 双列集合2. 单列集合体系结构3.Collection集合顶层接口3.1 Collection的遍历方法3.1.1 迭代器遍历3.1.2 增强for遍历3.1.3 Lambda表达式4. List单列集合4.1 List4.1.1 List集合特点4.1.2 List集合的特有方法4.1.3 List集合遍历方法4…

计算机组成原理实验三-----系统总线和具有基本输入输出功能的总线接口实验

总线是计算机中连接各个功能部件的纽带,是计算机各部件之间进行信息传输的公共通路。 总线不只是一组简单的信号传输线,它还是一组协议。他有两大特征 分时: 同一总线在同一时刻,只能有一个部件占领总线发送信息,其他部件要发送信…

游戏基础—Android平台进程模块信息获取

记得学习编程时的第一个helloworld程序&#xff1a; #include<stdio.h> Int main(int argc, char **argv) { printf(“Hello World”); return 0; } 打印” Hello World”&#xff0c;使用的是printf函数。但是&#xff0c;我们并没有去实现printf函数的功能&#xff0…

javascrip语法

JavaScript 语法涉及到很多方面&#xff0c;以下是常见的详细语法&#xff1a; 1. 变量 变量用于存放值&#xff0c;关键字 var 可以定义变量。 // javascript var x 5; // 定义变量 x&#xff0c;并赋值为 52. 数据类型 JavaScript 中有多种数据类型&#xff0c;包括&…

iOS 紧急通知

一般通知 关于通知的各种配置和开发&#xff0c;可以参考推送通知教程&#xff1a;入门 – Kodeco&#xff0c;具有详细步骤。 紧急通知表现 紧急通知不受免打扰模式和静音模式约束。当紧急通知到达时&#xff0c;会有短暂提示音量和抖动&#xff08;约2s&#xff09;。未锁…

一文速学数模-K-means聚类算法实战:信用卡用户画像聚类分析

目录 前言 一、用户画像概述 1.用户画像 2.为何用聚类算法作用户画像 二、数据质量校验 1.数据背景 2.数据说明 三、数据预处理 1.数据空缺值检验 2.数据归一化 四、K-means聚类 step1:选取K值 手肘法 step2:计算初始化K点 step3:迭代计算重新划分 五.画像分析 …

【LeetCode:221. 最大正方形 | 暴力递归=>记忆化搜索=>动态规划 | 二维dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Flutter - 实现防抖和节流

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新&#xff0c;请前往github查看最新代码 什么是防抖和节流&#xff1f; 函数节流&#xff08;throttle&#xff09;与 函数防抖&#xff08;debounce&#xff09;都是为了限制函数的执行频次&#xff0c;以…

AgentGPT,免费易用的 Auto-GPT 平替

你问 ChatGPT 答&#xff0c;属于单线问答式交互。但如果你问Auto-GPT&#xff0c;他会分解成N个任务&#xff0c;并且在遇到任务无法完成后&#xff0c;会尝试其它的方式来完成任务&#xff0c;很像老板交待你一个任务&#xff0c;中间的过程他不过问&#xff0c;遇到问题你自…

性能测评:腾讯云轻量服务器4核8G12M带宽流量CPU主频型号

腾讯云轻量4核8G12M应用服务器带宽&#xff0c;12M公网带宽下载速度峰值可达1536KB/秒&#xff0c;折合1.5M/s&#xff0c;每月2000GB月流量&#xff0c;折合每天66GB&#xff0c;系统盘为180GB SSD盘&#xff0c;地域节点可选上海、广州或北京&#xff0c;4核8G服务器网来详细…

【LeetCode】917. 仅仅反转字母、387. 字符串中的第一个唯一字符

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 917. 仅仅反转字母 387. 字符串中的第一个唯一字符 917. 仅仅反转字母 917. 仅仅反转字母…

光栅和矢量图像处理SDK:Graphics Mill 11.7Crack

Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松地向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 光栅图形 加载和保存 JPEG、PNG PSD 和其他 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像处理 使用任何维度…

大电流的走线和过孔

工程师在设计的时候&#xff0c;很容易忽略走线宽度的问题&#xff0c;因为在数字设计时&#xff0c;走线宽度不在 考虑范围里面。通常情况下&#xff0c;都会尝试用最小的线宽去设计走线&#xff0c;这时&#xff0c;在大电流时&#xff0c;将会导致很严重的问题。下面的公式用…

Vue3文字滚动(TextScroll)

可自定义设置以下属性&#xff1a; 滚动文字数组&#xff08;sliderText&#xff09;&#xff0c;类型&#xff1a;Array<{title: string, link?: string}>&#xff0c;必传&#xff0c;默认[] 滚动区域宽度&#xff08;width&#xff09;&#xff0c;类型&#xff1a;…

智能汽车迈进中央计算“芯”时代

全新一代的中央计算E/E架构正在加速到来。《高工智能汽车研究院》认为&#xff0c;伴随着整车电子电气架构从分布式架构、域控制器架构到中央计算架构演变&#xff0c;整个智能汽车供应链体系即将发生重构。 其中&#xff0c;车规芯片是至关重要的一环&#xff0c;从底层支撑着…

海创高科及时充系列共享充电宝 打开共享充电宝行业新局面

---让行业更加透明&#xff0c;更加真诚 在当下&#xff0c;电子产品很普遍。在使用电子产品的时候&#xff0c;需要进行充电。因此&#xff0c;各种充电宝有很大的市场需求。有些创业者感兴趣&#xff0c;那么&#xff0c;充电宝加盟哪个牌子好些&#xff1f;我们推荐海创高科…

【C语言】volatile关键字

文章目录一. 基本介绍二. 演示实验三. const 能否和 volatile 一起使用一. 基本介绍 volatile用来修饰变量&#xff0c;告知编译器不要对这个变量进行优化&#xff0c;每次要用到这个变量时都必须从内存中读取它的值。 看下面一段代码&#xff1a; 在 C/C 中被 const 修饰的…

激活函数(Activation Function)

目录 1 激活函数的概念和作用 1.1 激活函数的概念 1.2 激活函数的作用 1.3 通俗地理解一下激活函数&#xff08;图文结合&#xff09; 1.3.1 无激活函数的神经网络 1.3.2 带激活函数的神经网络 2 神经网络梯度消失与梯度爆炸 2.1 简介梯度消失与梯度爆炸 2.2 梯度不稳…

Java基础——缓冲流

&#xff08;1&#xff09;缓冲流概述&#xff1a; 缓冲流也称高效流&#xff0c;或者高级流。&#xff08;字节流可称原始流&#xff09;作用&#xff1a;缓冲流自带缓冲区&#xff0c;可以提高原始字节流&#xff0c;字符流读写数据的性能。&#xff08;2&#xff09;字节缓…