> 文章列表 > Shell编程(二)

Shell编程(二)

Shell编程(二)

上一章:

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 参数

9.3 input

10、流程控制

10.1 if