shell编程之条件语句__例题

news2024/11/18 20:31:35

文章目录

(1) 检查用户家目录中的test.sh文件是否存在,并且检查是否有执行权限.
在这里插入图片描述

[root@clr /opt/mywork]# cat 1.sh
#!/bin/bash
#检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权
cd /root
 
test -f test.sh
 
if [ $? -eq 0 ];then
 
  test -x test.sh
  if [ $? -eq 0 ];then
    echo "有test.sh文件且可执行"
  else
    echo "有test.sh文件但不可执行"
  fi
 
else
  echo "没有test.sh文件"
fi
[root@clr /opt/mywork]# bash 1.sh
有test.sh文件但不可执行
[root@clr /opt/mywork]# cd /root
[root@clr ~]# ll
-rw-r--r--. 1 root root  131 4月  27 19:26 test.sh

[root@clr ~]# chmod +x test.sh    #修改test.sh这个文件的执行权限
[root@clr ~]# ll

-rwxr-xr-x. 1 root root  131 4月  27 19:26 test.sh

[root@clr ~]# cd /opt/mywork/
[root@clr /opt/mywork]# bash 1.sh
有test.sh文件且可执行

(2) 提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误。

  • 进入决赛的整数成绩判断;
    在这里插入图片描述
[root@clr /opt/mywork]# cat 2.sh
read -p "请输入您100米赛跑的秒数:" sec 
 
if [ $sec -gt 0 ] && [ $sec -le 10 ];then
     read -p "请输入您的性别(男|女):" sex 
    if [ $sex == "男" ];then
       echo "恭喜进入选拔赛男生组"
    elif [ $sex == "女" ];then
       echo "恭喜进入选拔赛女生组"
  else
    echo "输入错误,请重新输入"
  fi  
else
    echo "很遗憾,您被淘汰了"
fi

[root@clr /opt/mywork]# bash 2.sh
请输入您100米赛跑的秒数:4   
请输入您的性别(男|女):nan
输入错误,请重新输入
[root@clr /opt/mywork]# bash 2.sh
请输入您100米赛跑的秒数:78
很遗憾,您被淘汰了
[root@clr /opt/mywork]# bash 2.sh
请输入您100米赛跑的秒数:2
请输入您的性别(男|女):男
恭喜进入选拔赛男生组
[root@clr /opt/mywork]# bash 2.sh
请输入您100米赛跑的秒数:5
请输入您的性别(男|女):女
恭喜进入选拔赛女生组
  • 进入决赛的小数成绩判断;
    在这里插入图片描述
[root@clr /opt/mywork]# cat 2.sh
#小数判断:
#!/bin/bash

#提示用户输入秒数
read -p "请输入100米赛跑的秒数:" second

#判断是否为数字
if [[ ! "$second" =~ ^[0-9]+(\.[0-9]+)?$ ]] #正则表达式的匹配方式 
then                    
  echo "输入错误,请重新输入。"
  exit 1
fi

#判断是否进入选拔赛
if (( $(echo "$second <= 10" | bc -l) )) #bc -l 命令会对输入进行数学计算,如果结果为真,则返回1 否则,返回0。
then    
  #进入选拔赛
  #提示用户输入性别
  read -p "请输入您的性别(男/女):" sex
  #判断性别
  if [[ "$sex" == "男" ]]
  then
    echo "恭喜您进入男生组!"
  elif [[ "$sex" == "女" ]]
  then
    echo "恭喜您进入女生组!"
  else
    echo "输入错误,请重新输入。"
  fi
else
  echo "很遗憾,您未能进入选拔赛。"
fi
[root@clr /opt/mywork]# bash 2.sh
请输入100米赛跑的秒数:9.8956664
请输入您的性别(男/女):男
恭喜您进入男生组!
[root@clr /opt/mywork]# bash 2.sh
请输入100米赛跑的秒数:4656.2
很遗憾,您未能进入选拔赛。
[root@clr /opt/mywork]# bash 2.sh
请输入100米赛跑的秒数:4.23
请输入您的性别(男/女):课件撒
输入错误,请重新输入。
[root@clr /opt/mywork]# bash 2.sh
请输入100米赛跑的秒数:4.6
请输入您的性别(男/女):女 
恭喜您进入女生组!

(3) 用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录.

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

在这里插入图片描述

[root@clr /opt/mywork]# vim 1.sh

#!/bin/bash
#编写能够自动生成一个6位随机密码的脚本
str='1234567890'
#passwd=00  #切记此处绝不可将passwd变量赋值为0,该>代码中是实现字符串的拼接,而不是数字的累加
for i in {1..6}
do
  a=$[RANDOM % ${#str}] #${#str}计算出字符串str的长
度,a用于获得0-9之间的任意随机数字
  tmp=${str:a:1} #tmp根据任意数字a,从str字符串中获
得a下标及之后的一个字段
  passwd+=$tmp  #passwd=$($passwd+$tmp)将每次从str>字符串中的任意字段,进行累计拼接

done
echo "生成的6位随机密码为:$passwd"

(5) 输出192.168.80.0/24网段内在线主机的ip地址,统计不在线主机的台数,并把不在线主机的ip地址和不在线时的时间保存到/opt/mywork/ip.txt文件里.

在这里插入图片描述

[root@clr /opt/mywork]# vim 4.sh

#!/bin/bash
ip=192.168.80.
j=0
for i in {1..5}
do
#{
  ping -c 3 -w 2 $ip$i &> /dev/null
  if [ $? -eq 0 ];then
    echo "在线的主机有:$ip$i"
  else
    let j++
    echo $ip$i >> /opt/mywork/ip.txt
    date >> /opt/mywork/ip.txt   #记录不在线主机的>时间
  fi
#  echo "不在线的主机台数有$j"
# }&
done
#wait  #该命令起到的效果是,等到并发执行结束后,才>会执行后面的命令
echo "不在线的主机台数有$j"

知识点拓展:并发执行时,自增变量会失效;
在这里插入图片描述

(6) 编写能够按照每100行分割文件的脚本.
在这里插入图片描述

[root@clr /opt/mywork]# vim 2.sh

#!/bin/bash
#编写能够按照每100行分割文件的脚本

#定义记录行数的变量
a=0
#定义分割的文件序号标识
b=1

IFS_OLD=$IFS       #先备份保存环境变量
IFS=$'\n'    #在当前for循环中修改环境变量为以换行符进行分割
read -p "请输入您需要分割的文件(该文件的绝对路径):" file
for i in $(cat $file)
#for i in $(cat passwd)
do
 let a++

 c=$[a % 100]
 if [ $c -eq 0 ];then
  echo $i >> wc-$b
  let b++
 else
  echo $i >> wc-$b
 fi
done

IFS=$IFS_OLD    #运行完for循环条件后,再次将环境变量保存为原来
的值,防止影响后续的for循环操作                                                                                                

(7) 将一个点分十进制格式的IP地址转换成点分二进制格式
比如 255.255.255.255 ——> 11111111.11111111.11111111.11111111

方法一:多方位控制输出二进制;
在这里插入图片描述
·

[root@clr /opt/mywork]# vim 3.sh

#!/bin/bash
#使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数(余数倒排法)

read -p "请输入一个十进制的IP地址:" num
num1=$(echo $num | awk -F. '{print $1}')
num2=$(echo $num | awk -F. '{print $2}')
num3=$(echo $num | awk -F. '{print $3}')
num4=$(echo $num | awk -F. '{print $4}')

 if [ ${num1} -ge 0 ] && [ ${num1} -le 255 ]; then
    for ((i=1; i<=8; i++))   #由于十进制数在0到255之间,可得对应的二进制数最多为8位,循环八次
    do
        yu1="$[ $num1 %2 ]$yu1"     #将$num取余数并赋予$num1, 后面跟一个$num1表示$num1之前的反向输出
        num1=$[ $num1 /2 ]  #迭代更新num作为被除数的值
    done
 else
   echo "$num1输入错误!"
 fi

 if [ $num2 -ge 0 ] && [ $num2 -le 255 ]; then
    for ((i=1; i<=8; i++))   #由于十进制数在0到255之间,可得对应的二进制数最多为8位,循环八次
    do
        yu2="$[ $num2 %2 ]$yu2"     #将$num取余数并赋予$num1, 后面跟一个$num1表示$num1之前的反向输出
        num2=$[ $num2 /2 ]  #迭代更新num作为被除数的值
    done
 else
   echo "$num2输入错误!"
 fi

 if [ $num3 -ge 0 ] && [ $num3 -le 255 ]; then
    for ((i=1; i<=8; i++))   #由于十进制数在0到255之间,可得对应的二进制数最多为8位,循环八次
    do
        yu3="$[ $num3 %2 ]$yu3"     #将$num取余数并赋予$num1, 后面跟一个$num1表示$num1之前的反向输出
        num3=$[ $num3 /2 ]  #迭代更新num作为被除数的值
    done
 else
   echo "$num3输入错误!"
 fi

 if [ $num4 -ge 0 ] && [ $num4 -le 255 ]; then
    for ((i=1; i<=8; i++))   #由于十进制数在0到255之间,可得对应的二进制数最多为8位,循环八次
    do
        yu4="$[ $num4 %2 ]$yu4"     #将$num取余数并赋予$num1, 后面跟一个$num1表示$num1之前的反向输出
        num4=$[ $num4 /2 ]  #迭代更新num作为被除数的值
    done
 else
   echo "$num4输入错误!"
 fi

echo "十进制数${num}转换二进制为: $yu1.$yu2.$yu3.$yu4"

方法二:余数倒排法;

在这里插入图片描述

[root@clr /opt/mywork]# vim 3.sh

#!/bin/bash
#使用循环语句将一个 0到255 之间的十进制数转换成8位数二进制数(余数倒排法)

read -p "请输入一个十进制的IP地址:" num
num1=$(echo $num | awk -F. '{print $1}')
num2=$(echo $num | awk -F. '{print $2}')
num3=$(echo $num | awk -F. '{print $3}')
num4=$(echo $num | awk -F. '{print $4}')

for i in {1..8} #循环执行8次,确保将0-255范围内的十进制数转换为相应的八位二进制数
do
  a1=$[ num1 %2 ]$a1   #将IP地址中第一字段转换为二进制
  let num1=$[num1 /2]

  a2=$[ num2 %2 ]$a2    #将IP地址中第二字段转换为二进制 
  let num2=$[num2 /2]

  a3=$[ num3 %2 ]$a3  #将IP地址中第三字段转换为二进制
  let num3=$[num3 /2]

  a4=$[ num4 %2 ]$a4   #将IP地址中第四字段转换为二进制
  let num4=$[num4 /2]
done
echo "十进制的IP地址$num转换为二进制数为:${a1}.${a2}.${a3}.${a4}"

方法三:减数正排法;
在这里插入图片描述

[root@clr /opt/mywork]# vim 3.sh

#!/bin/bash
#减数正排法
read -p "请输入十进制的IP地址(0-255):" ip
b=0
IFSB=$IFS
IFS=$IFS'.'  #修改for循环默认的分隔符,将.分隔符添加到IFS环境变量中
for a in  $(echo $ip)  #IP字段以点分割为4段
do
  for i in {128,64,32,16,8,4,2,1}
  do
    NUM=$[$a - $i]
    if [ $NUM -lt 0 ];then
      echo -n "0"    #被减数不够减的情况,不换行输出0
    else
      echo -n "1"
      a=$NUM    #被减数够减的情况,不换行输出1
    fi
done

let b+=1
if [ $b -lt 4 ];then   #此处控制输出三个点
  echo -n "."
fi
done
echo   #此处控制输出空格,换行

(8) 假设/opt/test/ 目录中有多个重要文件,编写脚本使用 md5sum 命令一次性判别目录中的文件是否有发生过改动.
在这里插入图片描述

[root@clr /opt/mywork]# vim 5.sh

#!/bin/bash
for file in $(ls /opt/test)
do
  SUM_NOW=$(md5sum /opt/test/$file | awk '{print $1}')
  #SUM_NOW=$(md5sum $file | awk '{print $1}')  #此处获取到的file文件需要绝对路径下的文>件,当上一句中不带/*时,此句也可用/opt/test/$file,查看新获得的校验和
  SUM_OLD=$(grep $file /root/md5sum.txt | awk '{print $1}') #提取原先保存的校验和

  if [ "$SUM_NOW" != "$SUM_OLD" ];then    #如果校验和不一致,则说明文件有改动
    echo "$file文件内容有改动!"
  fi
done

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

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

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

相关文章

插件、组件、控件,你分得清吗?

最近和小伙伴交流&#xff0c;时常发生插件、组件、控件等概念混淆的情况&#xff0c;因此导致经常会错意。感觉还是很有必要带大家整理清楚的&#xff0c;今天就来跟大家来聊一聊插件、组件、控件的区别。 什么是插件 先按照官方的一些解释来看看插件的概念描述&#xff1f;…

搭建Debug(printf)Viewer调试环境

希望对KEIL开发的小白的有用&#xff0c;KEIL开发如果高效正确调用Printf 打印输出调试信息。 需要添加红色字体代码 #include <stdio.h> #define ITM_Port8(n) (*((volatile unsigned char *)(0xE00000004*n))) #define ITM_Port16(n) (*((volatile unsigned short *)(…

Android类似微信聊天页面教程(Kotlin)五——选择发送图片

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

【模拟IC学习笔记】 负反馈系统的稳定性

反馈方程 输出方程 误差方程 环路增益 定义:当输入电压接地、并将环路断开时&#xff0c;所计算的增益就是环路增益 时&#xff08;幅度1&#xff0c;相位-180&#xff09;电路稳定在电源或低状态或在电源和地之间振荡。 分析稳定性时是对环路增益进行分析&#xff0c;通过环…

Java+Selenium+Testng自动化学习(一):环境搭建

目录 一、软件准备及版本介绍&#xff1a; 二、安装步骤及环境变量配置&#xff1a; 2.1 Java安装及配置 2.2 IDE工具&#xff08;Intellij IDEA&#xff09;安装及配置 2.3 Maven安装及配置 2.4 Maven本地仓库配置 2.5 Intellij IDEA配置mvn 一、软件…

全开放式时代来临,南卡OE带给你非同寻常的舒适和听觉感受

NANK南卡一直致力于深耕音频领域&#xff0c;不断创新&#xff0c;将于五月份发布全新形态的全开放式蓝牙耳机。相较于传统耳机&#xff0c;开放式蓝牙耳机除了佩戴零感舒适&#xff0c;还能在沉浸音乐的同时与外界保持沟通。南卡OE作为新推出的开放式蓝牙耳机&#xff0c;采用…

7年从测试废物到测试主管,如何从纯功能测试内卷中破局?

我大学学的计算机专业&#xff0c;有一点编程基础。我的软件测试职业开始和大多数测试人员一样&#xff0c;一开始在一家电商公司做软件功能测试。 大部分进入测试行业的朋友&#xff0c;最开始接触都是纯功能界面测试&#xff0c;随着工作年限&#xff0c;会接触到一些常用测试…

计算机体系结构总结:内存一致性模型 Memory consistency Model

存储一致性是为了保证多线程背景下的访存顺序&#xff0c;多线程的语句是可以交错执行&#xff0c;使得顺序不同产生不同的执行结果。 下面P2的输出结果可能是什么&#xff1f; P1, P2两个线程的语句是可以交叉执行的&#xff0c;比如1a, 2a, 2b, 1b&#xff1b;一个线程内的语…

网络基础学习:什么是网络与网络发展史

什么是网络与网络发展史 什么是网络&#xff1f;什么是网络发展史&#xff1f;分组交换技术TCP/IP技术Web技术ARPANET&#xff08;1969年&#xff09;Internet&#xff08;1983年&#xff09;万维网&#xff08;1990年&#xff09;移动互联网&#xff08;2007年&#xff09;物联…

Golang - GraphQL 搭配 Database

介绍 上一篇我们用GraphQL 已经有个基本的认识 接着来模拟真实的情境搭配Database 来使用 这篇主要都是在初始化环境 示例代码 通过 Docker 设置 MySQL 数据库 从 DockerHub 拉取 MySQL 镜像docker pull mysql 创建MySQL数据库 $ docker exec -it mysql bash $ mysql -u …

Python代码学习之给图片添加文字或图片水印

前言 图片加水印有什么好处&#xff1f;在现今的数字化时代&#xff0c;网络上的图片泛滥&#xff0c;盗图现象也越来越严重。因此&#xff0c;在发布文章时&#xff0c;为了保护自己的原创作品版权&#xff0c;很多人选择使用水印来保护他们的图片。这样就能更好地做到&#…

Java基础(十九)反射机制

1. 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中&#xff0c;所有的对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致。 Object obj new String(“hello”); obj.getClass() 例如&#xff1a;某些变…

ChatGPT技术如何助力汽车门店销售服务水平提升?

过往&#xff0c;由于线下销售过程没有数字化记录&#xff0c;销售顾问的销讲要点执行情况、客户在体验展车、试乘试驾等过程中的反馈&#xff0c;没法真实全面地记录下来&#xff0c;因此很难做精细化的销售管理和客户心声分析。销售沟通过程不透明、员工服务质量难评估。 在…

Docker启动多个mysql容器

原有镜像mysql5.7.41&#xff0c;已启动mysql容器端口3306&#xff0c;再启动一个端口号为3400的容器。指定用户名root,mima &#xff0c;密码123456 命令&#xff1a; docker run --name zjfz-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3400:3306 -d mysql 名字&#xff1a;zjfz…

【软考备战·希赛网每日一练】2023年5月5日

文章目录 一、今日成绩二、错题总结第一题 三、知识查缺 题目及解析来源&#xff1a;2023年05月05日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 有返回消息的就是同步消息&#xff1b;不需要等待返回消息就可以去做其他事情的请求消息就是异步消息…

数影周报:假冒ChatGPT的恶意软件激增,谷歌开启无密码登录

本周看点&#xff1a;假冒ChatGPT的恶意软件激增&#xff1b;谷歌开启无密码登录&#xff1b;京东申请注册Chat相关商标&#xff1b;Flexport收购 Shopify Logistics...... 数据安全那些事 Meta&#xff1a;假冒ChatGPT的恶意软件激增 美东时间周三&#xff0c;Facebook的母公司…

SSM框架(SpringBoot快速构建)

简介 本文意在快速构建一个可以接受前端访问&#xff0c;并进行数据库查找&#xff0c;随后返回相关信息给前端的项目。 ssm为Spring IocSpringMVCMyBatis的缩写 Spring Ioc:管理对象的一个工厂。对象之间有依赖&#xff0c;相互引用Spring MVC:开发代码模式Mybatis:操作数据…

搭建网站使用轻量云服务器怎么样?

​  搭建网站实际上可以从轻量云服务器租用中受益匪浅。如果您正在为个人网站寻找更多的低成本和轻运维&#xff0c;您可以考虑将轻量云服务器作为一个可行的选择。它提供独享资源、独立的IP地址、专属防火墙以及比传统虚拟主机更好的安全性能。本文将介绍轻量云服务器对建站…

OBCP题目及解析

1.关于OCP中的新建告警项&#xff0c;告警项的所属范围包括________&#xff1f;&#xff08;正确答案个数&#xff1a;2个&#xff09; A. OB告警 B. 操作系统告警 C. 应用告警 D. 服务器硬件告警 E. OBProxy告警 【答案】AC 【解析】如下图所示&#xff1a; 2.如果Oce…

大疆无人机 MobileSDK(遥控器/手机端)开发 v4版<1>

大疆无人机飞控开发 大疆无人机SDK开发包功能概述飞行控制相机实时视频流传感器数据下载媒体文件遥控器&#xff0c;电池和无线链路连接应用程序和产品 v4版sdk 二次开发注册成为DJI开发者生成 App KeyAndroid 示例代码配置Android Studio项目集成创建一个新的应用配置Gradle 脚…