首页 > 系统相关 >Shell编程自动化之if、for、while和函数

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

时间:2024-01-13 16:01:03浏览次数:23  
标签:shell 函数 编程 echo Shell while sh debian dtt

一、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/bash

ip=192.168.2.111

if ping -c1 $ip &>/dev/null
then
	echo "$ip is up"
else
	echo "$ip is down"
fi

dtt@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}
do
	ip2=$(echo $n)
	ip=$ip1$ip2

	# echo $ip
	
	if ping -c1 $ip &>/dev/null
	then
		echo "$ip is up"
		echo "$ip" &>> host_up.txt
	else
		echo "$ip is down"
		echo "$ip" &>> host_down.txt
	fi
done

三、while循环

1.格式

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

2.实例测试

dtt@debian:~$ cat while_test.sh 
#!/bin/bash

n=1
sum=0

while [ $n -lt 5 ]
do
	#echo $n
	let sum+=n
	let n+=1
done

echo "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/bash

file="ip.txt"
#定义函数
function test(){
	for file_name in `ls`
	do
		# echo $file_name

		if [ "$file_name" == "$file" ];then
			echo "$file文件存在"
		fi
	done
}

#执行函数
test

dtt@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/bash


get(){
	echo "传入的参数个数共$#个"
	
	for arg in $@
	do
		echo "$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 $4

dtt@debian:~/shell$ bash func2.sh 10 20 30 40
传入的参数个数共4个
10
20
30
40
dtt@debian:~/shell$ 


标签:shell,函数,编程,echo,Shell,while,sh,debian,dtt
From: https://blog.51cto.com/datutu/9232628

相关文章

  • Shell编程自动化之Shell编程基础
    一、Shell可以用来做什么1.自动化批量系统初始化程序;2.自动化批量软件部署程序;3.应用程序管理;4.日志分析处理程序;5.自动化备份恢复程序;6.自动化信息采集及监控程序;7.自动化管理程序;二、Shell概述1.Shell是操作系统的外壳,是用户操作系统的命令接口,是一个介于用户和系统内核......
  • 绕过安全限制,通过cmd执行PowerShell脚本(2)
    之前的做法是将PowerShell脚本的代码拼接成一个大字符串,然后通过在cmd中运行powershell去直接运行。现在觉得,多少有些脱裤子放屁。其实可以直接在cmd中设置脚本运行策略。改进后的脚本如下:首先是run.bat@echooffFOR/F"tokens=*USEBACKQ"%%FIN(`powershellGet......
  • 【LeetCode 2494. 合并在同一个大厅重叠的活动】MySQL用户变量编程解决区间合并问题
    题目地址https://leetcode.cn/problems/merge-overlapping-events-in-the-same-hall/代码#WriteyourMySQLquerystatementbelowwitht2as(select*#----只需要改动这里的逻辑,其他不要动。注意里面的语句是“顺序执行的”-------------如果切换......
  • 【LeetCode1747. 应该被禁止的 Leetflex 账户】MySQL用户变量编程;尝试维护一个multise
    题目地址https://leetcode.cn/problems/leetflex-banned-accounts/description/代码witht1as(selectaccount_id,ip_address,loginastick,"login"asmytypefromLogInfounionallselectaccount_id,ip_address,logoutastick......
  • 《Java编程思想第四版》学习笔记53--关于UDP
    1、TCP和UDP端口是相互独立的。也就是说,可以在端口8080同时运行一个TCP和UDP服务程序,两者之间不会产生冲突。P.547//:Dgram.java//Autilityclasstoconvertbackandforth//BetweenStringsandDataGramPackets.importjava.net.*;publicclassDgram{publ......
  • MySQL一键安装Shell脚本的实现
    本文主要介绍了MySQL一键安装Shell脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧−目录一、脚本说明1、linux系统版本2、MySQL版本3、运行方式二、脚本内容一、脚本说明1、linux系统版本EL6,EL7,EL8,......
  • Windows 10 中,可以使用 PowerShell 添加打印和文件服务的角色功能组件,包括 Internet
    在Windows10中,可以使用PowerShell添加打印和文件服务的角色功能组件,包括Internet打印客户端、LPD打印服务和LPR端口监视器。以下是添加这些功能组件的PowerShell命令:首先,以管理员身份打开PowerShell终端。在开始菜单中搜索"PowerShell",然后右键点击"WindowsPo......
  • 【LeetCode 2142. 每辆车的乘客人数 I】乘客到站等车,车到站载客。MySQL用户变量编程完
    题目地址https://leetcode.cn/problems/the-number-of-passengers-in-each-bus-i/description/思路将所有关键时刻作为tick。(同一时刻车和人同时到,默认人在车前到)之后按照tick升序,使用MySQL用户变量编程完成计算逻辑。输出结果。代码withticksas(selectarrival_tim......
  • 【教3妹学编程-算法题】统计出现过一次的公共字符串
    3妹:哈哈哈哈哈哈,太搞笑了~呵呵呵呵呵呵2哥:3妹干嘛呢,笑的这么魔性!3妹:在看王牌对王牌,老搞笑了2哥:这季好像没有贾玲吧。3妹:是啊,听说贾玲去导电影了,还狂瘦了100斤呢,哎,我也该减减肥了。2哥:切,你每隔几天就会说要减肥,也没见你减啊3妹:不吃饱哪有力气减肥,我每天还要刷题、找工作,多辛苦啊......
  • Linux Shell接收键盘输入
    1.read命令格式read[选项][变量名]选项:-p“提示信息”:在等待read输入时,输出提示信息-t“秒数”:read命令会一致等待用户输入,使用此选项可以指定等待时间-n“字符数”:read命令只接受指定的字符数,就会执行-s:隐藏输入的数据,适用于机密信息的......