3.shell脚本例子

news2024/11/23 1:32:06

文章目录

      • 1.计算从1到100所有整数的和
      • 2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
      • 3.求从1到100所有整数的偶数和、奇数和
      • 4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码
      • 5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
      • 6.用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
      • 7.使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数
      • 编写能够自动生成一个6位随机密码的脚本
      • 将一个点分十进制格式的IP地址转换成点分二进制格式
      • 假设/opt/test/ 目录中有多个重要文件,编写脚本使用 md5sum 命令一次性判别目录中的文件是否有发生过改动
      • 输出环境变量PATH的目录所包含的所有可执行文件
      • 通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

1.计算从1到100所有整数的和

#!/bin/bash

sum=0
for ((i=1;i<=100;i++))    ##确认循环范围
do
	sum=$(($sum+$i))   ##进行累加
done
echo "1到100所有整数和为:" $sum

在这里插入图片描述

2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

#!/bin/bash

read -p "请输入一个小于100的整数:" a    ##手动输入一个数
sum=0
for ((i=1;i<=a;i++))     ##1到输入数的循环
do
	sum=$(($sum+$i))
done
echo "1到这个数之间的所有整数和为:" $sum

在这里插入图片描述

3.求从1到100所有整数的偶数和、奇数和

#!/bin/bash

a=0
b=0
for ((i=1;i<=100;i++))
do
	if [ $(($i % 2)) -eq 0 ]
	then
		a=$(($a+$i))
	else
		b=$(($b+$i))
	fi
done
echo "偶数和为:" $a
echo "奇数和为" $b

在这里插入图片描述

4.用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码

vim /opt/users.txt
zhangsan
lisi
wangwu
wolong


#!/bin/bash

for user in $(cat /opt/users.txt)
do
	#echo $user    获取用户
	grep "^$user:" /etc/passwd > /dev/null
	##在用户文件中通过以什么什么开头的方式查找所在行,找到文件后将结果放在黑洞文件不显示
	
	if [ $? -eq 0 ]     ##判断上一条命令是否执行成功
	then
		echo "存在当前$user用户"
		
		passwd=$(grep "$user" /etc/shadow | awk -F: '{print $2}' )		##在用户密码文件通过切片查找用户的密码
		
		if [ "$passwd" = "!!" ] || [ "$passwd" = "*" ] || [ -z "passwd" ]   ##判断查找的用户密码是否为空或者!!,这些都是没密码的状态
		then
			echo "$user用户没密码"
			while true     ##设置一个死循环,判断两次密码是否输入一样
			do
				read -p "请输入$user用户的密码:" PD1
				read -p "请再次输入$user用户的密码:" PD2
				if [ "$PD1" == "$PD2" ]
				then
					echo $PD1 | passwd --stdin $user > /dev/null
					echo "$user用户密码设置完成"
					break
				else
					echo "两次密码输入不一样"
				fi
			done
		else
		fi
	else
		echo "$user用户不存在"
		useradd $user
		echo "$user用户创建完成,请设置用户密码"
		
		while true
			do
				read -p "请输入$user用户的密码:" PD1
				read -p "请再次输入$user用户的密码:" PD2
				if [ "$PD1" == "$PD2" ]
				then
					echo $PD1 | passwd --stdin $user > /dev/null
					echo "$user用户密码设置完成"
					break
				else
					echo "两次密码输入不一样"
				fi
			done
		fi
done

5.检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

#!/bin/bash

read -p "请输入一个网段:" ip
for i in {1..254}
do
{
ping -c 3 -i 0.5 -W 2 ${ip}${i} &> /dev/null
if[ $? -eq 0 ]
then
echo "${ip}${i} is online!"
echo ${ip}${i} >> /opt/host_ip.txt
else
echo "${ip}${i} is offline!"
fi
}&     ##并行执行,加快执行速度
done 
wait    ##等上面的命令全部执行完,在执行下面的命令
cat /opt/host_ip.txt

6.用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警

#!/bin/bash

a=123456
for ((i=1;i<=3;i++))
do
	read -p "请输入密码:" passwd
	if [ "$a" == "$passwd" ]   ##字符的比较最好用引号引起来
	then
		echo "密码正确"
		exit
	else
		echo "密码错误请重新输入"
	fi
done
echo "你已经输错3次"

在这里插入图片描述

7.使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数

#!/bin/bash

read -p "请输入一个0-255的整数:" num

for i in {1..8}
do
	 a=$[$num % 2]$a
	 let num=$[$num / 2]
done
echo $a

在这里插入图片描述

编写能够自动生成一个6位随机密码的脚本

#!/bin/bash
num="0123456789abcdeABCDEF"

for ((i=1;i<=6;i++))
do
	a=$[RANDOM % ${#num}]
	tmp=${num:a:1}
	passwd=$passwd$tmp
done
echo "随机生成的6位密码位:" $passwd

在这里插入图片描述

将一个点分十进制格式的IP地址转换成点分二进制格式


#!/bin/bash

read -p "请输入完成的IP地址:" ip
b=0
IFSB=$IFS
IFS=$IFS'.'

for a in `echo $ip`    ##这里使用反撇号,获取命令执行结果
do
	for i in {128,64,32,16,8,4,2,1}
    do
    	NUM=$[$a - $i]
    	if [ $NUM -lt 0 ]
    	then
    		echo -n "0"
    	else
    		echo -n "1"
    		a=$NUM
    	fi
    done
    	let b+=1
    	if [ $b -lt 4 ]
    	then
    		echo -n "."
    	fi
done
echo
IFS=$IFSB

在这里插入图片描述

假设/opt/test/ 目录中有多个重要文件,编写脚本使用 md5sum 命令一次性判别目录中的文件是否有发生过改动

md5sum /opt/test/* > /opt/md5.txt
##  这个是在运行脚本前,将目录中的文件的MD5值存放在一个文件中



#!/bin/bash
for file in $(ls /opt/test)
do
	##echo $file    获取文件
	SUM_NOW=$(md5sum /opt/test/$file | awk '{print $1}')
	##获取现在文件的MD5值并将结果输入到文件中
	
	SUM_OLD=$(grep $file /opt/md5.txt | awk '{print $1}')
	##在存储MD5的文件中,根据文件名查找到
	
	if [ "$SUM_NOW" != "$SUM_OLD" ]##判断两次的MD5值是否一样
	then
		echo "$file文件发生改变"
	fi
done

在这里插入图片描述

输出环境变量PATH的目录所包含的所有可执行文件

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

#!/bin/bash

IFSOLD=$IFS
IFS=$':'

for folder in $PATH
do
	for file in $folder/*
	do
		if [ -f "${file}" ] && [ -x "${file}" ]
		then 
			echo "$file"
		fi
	done
done

IFS=$IFSOLD

在这里插入图片描述

通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

#!/bin/bash

IFSB=$IFS
IFS=$IFS':'

for folder in $PATH
do
	AllFile=$(find $folder -print)
	for i in $AllFile
	do
		if [ -f $i ] && [ -x $i ]
		then :
		else
			echo $i
		fi
	done
done
IFS=$IFSB

在这里插入图片描述

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

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

相关文章

【Java EE】-Servlet(一) 创建Maven下的webapp项目

作者&#xff1a;学Java的冬瓜 博客主页&#xff1a;☀冬瓜的主页&#x1f319; 专栏&#xff1a;【JavaEE】 分享: 在满园弥漫的沉静的光芒之前&#xff0c;一个人更容易看到时间&#xff0c;并看到自己的身影。——史铁生《我与地坛》 主要内容&#xff1a;创建一个基于maven…

【云计算•云原生】5.云原生之初识OpenStack

文章目录 OpenStack起源OpenStack基本组件HorizonNovaSwiftCinderKeystoneNeutronGlanceCeilometerTroveHeat OpenStack简单框架模型 OpenStack起源 OpenStack是一个由NASA和Rackspace合作研发并发起的&#xff0c;以Aapache许可证授权的自由软件和开放源代码项目。为公有云及…

JS 实现区块链分布式网络

JS 实现区块链分布式网络 这里主要 JS 实现区块链 实现的部分继续下去&#xff0c;对 Blockchain 这个对象有一些修改&#xff0c;如果使用 TS 的话可能要修改对应的 interface&#xff0c;但是如果是 JS 的话就无所谓了。 需要安装的依赖有&#xff1a; express body-parse…

字节跳动ByteHouse与亚马逊云科技携手打造新一代云数仓服务

随着全球化的发展&#xff0c;越来越多的中国企业开始涉足海外市场&#xff0c;开展跨境业务。在这个过程中&#xff0c;强大的数据分析能力是出海企业不可或缺的重要一环。通过有效的数据分析&#xff0c;能帮助企业更好地了解全球市场对产品的需求便于调整产品战略&#xff0…

微服务---RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署)

RabbitMQ进阶(消息可靠性,延迟队列,惰性队列,集群部署) 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见…

Python每日一练(20230506) 存在重复元素I、II、III

目录 1. 存在重复元素 Contains Duplicate I 2. 存在重复元素 Contains Duplicate II 3. 存在重复元素 Contains Duplicate III &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 存在重…

项目管理-数据管理能力DCMM模型

DCMM 数据管理能力成熟度评估模型简介 DCMM&#xff08;Data Management Capability Maturity Assessment Model&#xff0c;数据管理能力成熟度评估模型&#xff09;是我国首个数据管理领域国家标准&#xff0c;将组织内部数据能力划分为八个重要组成部分&#xff0c;描述了每…

重新定义座舱智能化的下半场?谁能抓住弯道超车的窗口期

2020年&#xff0c;高通8155上车之前&#xff0c;行业的定义更多是4G联网互联网生态&#xff08;智能手机的复刻&#xff09;&#xff0c;以斑马智行为代表&#xff1b;而随着集成异构计算、高性能AI引擎&#xff08;8TOPS算力&#xff09;的高通8155密集上车&#xff0c;驱动行…

车载多屏互动联动动画版本同屏幕大小情况方案设计--众筹项目

hi&#xff0c;粉丝朋友们&#xff1a; 背景及成果展示 本节带大家来开始学习多屏幕互动的动画版本设计&#xff0c;回忆一下我们已经在之前blog和wms课程中学习了多屏互动的非动画版本如下&#xff1a; 再来看看今天我们想要实现有动画版本的成果&#xff1a; 是不是相比之…

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比

多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比 目录 多维时序 | MATLAB实现基于VMD-SSA-LSSVM、SSA-LSSVM、VMD-LSSVM、LSSVM的多变量时间序列预测对比预测效果基本介绍程序设计学习总结参考资料 预测效果 基本介绍 多维时序 …

全景环视搭载率突破30%,本土供应商在细分市场突围而出

随着行泊一体、AVP等功能成为智能驾驶赛道新周期的主角&#xff0c;背后支撑落地的全景环视&#xff08;也称为360环视&#xff09;方案也不再是传统功能定义场景&#xff08;为驾驶员提供泊车及盲区辅助&#xff09;下的应用&#xff0c;同时&#xff0c;环视与周视的硬件复用…

【Mybatis-Plus笔记01】整合Springboot实现基础配置和增删改查案例

【Mybatis-Plus笔记01】整合Springboot实现基础配置和增删改查案例 【一】Mybatis-Plus的简单介绍【1】MP的特特性有哪些【2】MP的框架结构 【二】MP的使用案例&#xff08;1&#xff09;准备开发环境&#xff08;2&#xff09;添加pom依赖&#xff08;3&#xff09;编写yml配置…

基于SpringBoot+Vue实现的体检录入系统

【简介】 本体检信息录入系统采用前端&#xff1a;vue&#xff1b;后端&#xff1a;springbootmybatis-plusredismysql技术架构开发&#xff0c;前后端分离&#xff0c;容易上手。除了基本的体检结果查询、录入及导出外&#xff0c;在录入中还能对录入信息进行智能计算。 【功…

LeetCode:20. 有效的括号

20. 有效的括号 1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果 1&#xff09;题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1…

Multi-Head self-Attention结构细节

先验知识&#xff1a; Self-Attention结构细节及计算过程https://blog.csdn.net/weixin_54039182/article/details/130515594?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22130515594%22%2C%22source%22%3A%22weixin_54039182…

分布式夺命12连问

分布式理论 1. 说说CAP原则&#xff1f; CAP原则又称CAP定理&#xff0c;指的是在一个分布式系统中&#xff0c;Consistency&#xff08;一致性&#xff09;、 Availability&#xff08;可用性&#xff09;、Partition tolerance&#xff08;分区容错性&#xff09;这3个基本…

Zotero 抓取知网文献失败解决办法梳理(针对问题:更新Translator无效,更新茉莉花插件无效,卸载Zotero无效,使用学校VPN访问知网)

Zotero 抓取知网文献失败解决办法梳理&#xff08;针对问题&#xff1a;更新Translator无效&#xff0c;更新茉莉花插件无效&#xff0c;卸载Zotero无效&#xff0c;使用学校VPN访问知网&#xff09; 问题背景解决方案一解决方案二解决方案三 说在前面&#xff1a;解决方案一和…

idea 远程debug阿里云服务器springboot项目

文章目录 前言意见和建议技术要点小试牛刀通信端口放行Idea增加remote启动项服务端JAR增加参数并启动本地项目启动远程debugpostman测试debug 前言 在实际的生产中不免会出现系统问题&#xff0c;有的在测试环境发现&#xff0c;有的在预发布环境发现&#xff0c;更有甚者在生…

播放卡顿分析

看下这个M3U8请求&#xff0c;时间间隔超过duration的时长。ts的duration是11S M3U8内容更新慢&#xff1f;

JavaScript:二叉树(前序遍历,中序遍历,后序遍历,递归法,统一迭代法)

文章目录 二叉树递归法迭代法 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09;二叉树的递归遍历递归法作图分析代码和思路分析 二叉树的迭代遍历前序遍历迭代分析代码及思路分析 94. 二叉树的中序遍历递归法作图举例递归流程 迭代法代码 145. 二叉树的后序遍历 …