Shell编程自动化之if、for、while和函数

一、if语句

1.单分支格式

if [ 条件判断式 ]; then当条件判断成立时,执行的命令内容
fi                 
if [ 条件判断式 ]
then当条件判断成立时,执行的命令内容
fi  

2.双分支格式

if [ 条件判断式 ]; then当条件判断成立时,执行的命令内容
else当条件判断不成立时,执行的命令内容
fi 

3.多分支格式

if [ 条件判断式 ]; then当条件判断成立时,执行的命令内容
elif [ 条件判断式2 ]; then当条件判断2成立时,执行的命令内容
else当上面条件判断都不成立时,执行的命令内容
fi 

4.实例测试

通过ping测试局域网内,主机是否在线

dtt@debian:~/shell$ cat if_test.sh 
#!/bin/baship=192.168.2.111if ping -c1 $ip &>/dev/null
thenecho "$ip is up"
elseecho "$ip is down"
fidtt@debian:~/shell$ chmod 755 if_test.sh 
dtt@debian:~/shell$ ./if_test.sh 
192.168.2.111 is up
dtt@debian:~/shell$ 
二、for循环

1.格式

for  变量名  in  取值列表
do执行命令内容
done

2.实例测试

通过ping测试局域网内,192.168.2网段全部主机是否在线,并将是否在线结果分开存储到文件。

for_test.sh

#!/bin/bash
ip1="192.168.2."for n in {1..254}
doip2=$(echo $n)ip=$ip1$ip2# echo $ipif ping -c1 $ip &>/dev/nullthenecho "$ip is up"echo "$ip" &>> host_up.txtelseecho "$ip is down"echo "$ip" &>> host_down.txtfi
done
三、while循环

1.格式

while   [ 条件判断式 ]
do当上述条件判断式为真时,执行命令语句
done   

2.实例测试

dtt@debian:~$ cat while_test.sh 
#!/bin/bashn=1
sum=0while [ $n -lt 5 ]
do#echo $nlet sum+=nlet n+=1
doneecho "sum=$sum"
dtt@debian:~$ chmod 755 while_test.sh 
dtt@debian:~$ ./while_test.sh 
sum=10
dtt@debian:~$ 

continue表示当满足条件时跳出本次循环,继续后续循环执行。

break表示当满足条件时直接结束本次循环。

四、函数

1.函数格式

function 函数名(){函数体return 返回值
}
function 函数名{函数体return 返回值
}
函数名(){函数体return 返回值
}

2.实例测试

判断文件夹中是否存在ip.txt文件

dtt@debian:~/shell$ cat function_test.sh 
#!/bin/bashfile="ip.txt"
#定义函数
function test(){for file_name in `ls`do# echo $file_nameif [ "$file_name" == "$file" ];thenecho "$file文件存在"fidone
}#执行函数
testdtt@debian:~/shell$ chmod 755 function_test.sh 
dtt@debian:~/shell$ ./function_test.sh 
ip.txt文件存在
dtt@debian:~/shell$ 

3.有关函数执行的基础概念

  • shell函数必须先定义,再执行,shell脚本自上而下加载。

  • 执行shell函数,直接写函数名字即可,无需添加其他内容。

  • 函数体内定义的变量,称为局部变量,使用local关键字,定义局部变量。

  • 函数体内需要添加return语句,作用是退出函数,且赋予返回值给调用该函数的程序,也就是shell脚本(在shell脚本中,定义并使用函数,shell脚本执行结束后,通过$?获取其返回值)。

  • return语句和exit不同:

    return是结束函数的执行,返回一个退出值或返回值。

    exit是结束shell环境,返回一个退出值或返回值给当前的shell。

  • 函数如果单独写入一个文件里面,需要使用source读取。

4.函数传参数

函数定义和执行,很多都是分开在不同的文件中,函数写在一个文件中,只定义不执行,另外一个脚本,读取该函数文件,且加载该函数。

下面测试,func2.sh调用加载func1.sh文件,并向func1.sh内的get函数传4个参数


dtt@debian:~/shell$ cat func1.sh 
#!/bin/bashget(){echo "传入的参数个数共$#个"for arg in $@doecho "$arg"done
}dtt@debian:~/shell$ cat func2.sh 
#!/bin/bash# 条件测试,加载函数
[ -f /home/dtt/shell/func1.sh ] && source /home/dtt/shell/func1.sh || exit# 执行函数
get $1 $2 $3 $4dtt@debian:~/shell$ bash func2.sh 10 20 30 40
传入的参数个数共4个
10
20
30
40
dtt@debian:~/shell$ 

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

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

相关文章

【CCNet】《CCNet:Criss-Cross Attention for Semantic Segmentation》

ICCV-2019 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 Experiments on Cityscapess5.3 Experiments on ADE20K5.4 Experiments on COCO 6 Conclusion(own) 1 Ba…

MAC通过终端,使用python3建立本地Web服务

实现局域网Web服务,很简单几句命令,一起看看。 1. 我相信你已经有 brew(Homebrew 包管理器) 了对么? 如果没有可以执行这个方法 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. 安…

网页的介绍

目录 什么是网页: 网页的组成: 什么是HTML: 网页的总结: 浏览器: web标准: 为什么需要Web标准: web标准的构成: 什么是网页: 1.网站是指在因特网上根据一定的规…

openal中使用现代C++智能指针管理ffmpeg中裸指针的用法

裸指针包装 /* Define unique_ptrs to auto-cleanup associated ffmpeg objects. */ struct AVIOContextDeleter {void operator()(AVIOContext *ptr) { avio_closep(&ptr); } }; using AVIOContextPtr std::unique_ptr<AVIOContext,AVIOContextDeleter>;struct AVF…

清晰讲解Cookie、Session、Token、JWT之间的区别

文章目录 什么是认证(Authentication)什么是授权(Authorization)什么是凭证(Credentials)什么是Cookie什么是SessionSession的痛点 Cookie 和 Session 的区别什么是Token(令牌)Acesss TokenRefresh Token Token 和 Session 的区别Token 与 Cookie什么是 JWT生成JWTJWT 的原理JW…

利用PowerShell和Mkvtoolnix批量去除视频封面

利用PowerShell v5和Mkvtoolnix批量去除视频封面 PowerShell Version : 5.1.22621.2506 foreach ($file in Get-ChildItem "*.mp4") { Start-Process -FilePath "C:\Program Files\MKVToolNix\mkvmerge.exe" -ArgumentList "--ui-language en --pr…

Memcache简介与运维

开源、高性能、高并发的分布式内存缓存系统。 作用 缓存关系型数据库的结果&#xff0c;减少数据库自身访问的次数。 常见内存缓存服务软件对比 memcache 纯内存 redis、memcachedb 可持久化存储&#xff0c;同时会使用磁盘存 …

idea使用docker-compose发布应用程序

非常重要的话说在前头 idea要想使用docker-compose&#xff0c;不能使用ssh创建idea Docker&#xff0c;而需要使用socket创建idea Docker。 socket docker是不安全的&#xff0c;任何人都可以访问你的docker&#xff0c;所以只能测试环境使用&#xff0c;请勿在正式环境使用s…

问题解决记录-pypcd

项目场景&#xff1a; python3 环境下使用 pypcd 读取点云 pcd 文件 pip install pypcd 安装 pypcd 库 问题描述 读取pcd 文件时候报错 问题 1、 import cStringIO as sio ModuleNotFoundError: No module named cStringIOpython3.X已经取消了cStringIO模块 网上建议&…

UniApp 面试题

UniApp 面试题 1. 什么是 UniApp&#xff1f;它有什么特点&#xff1f; 答案&#xff1a;UniApp 是一个基于 Vue.js 的跨平台应用开发框架&#xff0c;可以使用 Vue.js 的开发语法编写一次代码&#xff0c;然后通过编译生成可以在多个平台&#xff08;包括iOS、Android、H5 等…

每日一题 2182. 构造限制重复的字符串(中等,贪心)

贪心&#xff0c;每次都尽量取大的&#xff0c;除非连续取的次数超出限制&#xff0c;此时取一个下一个字符 class Solution:def repeatLimitedString(self, s: str, repeatLimit: int) -> str:N 26count [0] * Nfor c in s:count[ord(c) - ord(a)] 1ret []i, j, m N …

go-carbon v2.3.5 发布,轻量级、语义化、对开发者友好的 golang 时间处理库

carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库&#xff0c;支持链式调用。 目前已被 awesome-go 收录&#xff0c;如果您觉得不错&#xff0c;请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…

98. 验证二叉搜索树(LeetCode)

文章目录 前言一、题目分析二、算法原理三、代码实现剪枝总结 前言 在本文章中&#xff0c;我们将要详细介绍一下Leetcode中第98题验证二叉搜索树&#xff0c; 在本内容中我们将会学到递归解决二叉树&#xff0c;全局变量&#xff0c;剪枝等等相关内容。 一、题目分析 分析&a…

python 可变与不可变类型

不可变变量 不可变量包括&#xff1a;数值类型、字符串和元组。一旦被重新赋值&#xff0c;变量对应的内存地址就会发生改变。 可变变量 不可变量包括&#xff1a;列表、字典、集合。添加或者修改数据时&#xff0c;变量对应的内存地址不会改变。也就是可变类型&#xff0c;一…

单片机原理及应用:定时器/计数器综合应用

本文是《单片机原理及应用》专栏中的最后一篇文章&#xff0c;笔者以编译器的安装配置——51单片机简介——LED和数码管外设——开关和按键控制功能切换——外部中断系统——定时器与计数器为知识大纲&#xff0c;介绍了C语言编程控制51单片机的入门教程。作为收尾&#xff0c;…

关于java方法调用的回顾

关于java方法调用的回顾 上篇文章中我们回顾了一下java方法的定义&#xff0c;本篇文章中我们来回顾一下方法的调用&#xff0c;这样更利于咱们后续的面向对象的学习&#x1f600;。 方法的调用 静态方法。 非静态方法。 形参和实参。 值传递和引用传递。 this关键字。 …

基于JavaWeb+BS架构+SpringBoot+Vue+Spark的共享单车数据存储系统的设计和实现

基于JavaWebBS架构SpringBootVueSpark的共享单车数据存储系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 第一章 概述 2 1.1课题研究背景 2 1.2 课题研究意义 2 1.3国内…

ASP.NET作业批改系统源码

ASP.NET作业批改系统源码 源码描述&#xff1a; 该系统主要完成学生注册&#xff0c;登陆&#xff0c;作业的上传&#xff0c;教师对作业进行发布&#xff0c;批改等功能。 包括登陆子系统&#xff0c;学生子系统&#xff0c;教师子系统和管理员子系统。 管理员功能 资料管理:修…

【Maven】004-基于 IDEA 构建 Maven 工程

【Maven】004-基于 IDEA 构建 Maven 工程 文章目录 【Maven】004-基于 IDEA 构建 Maven 工程一、概述1、项目构建2、命令方式项目构建命令war 包打包插件和 jdk 版本不匹配 二、项目构建1、命令方式2、IDEA 可视化方式3、构建产物 一、概述 1、项目构建 项目构建是将软件开发…

XTdrone运行ego需打开多个终端 麻烦 一键启动脚本

VINS-Fusion仿真部分 建立plan.sh文件 #!/bin/bash gnome-terminal -x bash -c "cd ~/PX4_Firmware; roslaunch px4 indoor1.launch" sleep 5 gnome-terminal -x bash -c "cd ~/xtdrone_ws; bash scripts/xtdrone_run_vio.sh" sleep 5 gnome-terminal …