3.shell脚本例子

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

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜海赤竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值