经典常用的脚本讲解

news2024/12/22 22:52:44

目录

一:echo 语句

二:while read命令​编辑 

三:猴子摘香蕉问题

四:斐波拉切数求前10个数的和

​五:随机生成8位数的密码

六:二进制转换

(1)余数倒排法

 (2)减法正排法

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

(1)for循环

 (2)until循环

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

九:求从1到100所有整数的偶数和、奇数和

(1)方法一

(2)方法二

十: 用户输密码问题

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

(1)方法一

 (2)方法二

十二:查看文件是否改动过

十三: 写个逛淘宝选购商品脚本

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


一:echo 语句

i=`echo "aa,bb,cc, dd"`

#从最后倒数到最短的匹配部分(用%)后面的逗号的地方被删除
echo ${i%,*}
#输出的结果:
aa,bb,cc

#从最后倒数到最长的匹配部分(用%%)后面的逗号的地方都被删除
echo ${i%%,*}
#输出的结果:
aa

#从开头到最短的匹配部分(用#)后面的逗号的地方被删除
echo ${i#*,}
#输出的结果:
bb,cc,dd

#从开头到最长的匹配部分(用##)后面的逗号的地方被删除
echo ${i##*,}
#输出的结果:
dd

#截取字符串中的某一段字符
echo ${i:下标:字符长度}

#输出变量名的字符串长度
echo ${#变量名}

#赋予一个默认值。
echo ${变量:-默认值}

二:while read命令 

三:猴子摘香蕉问题

猴子摘下来n个香蕉,当天吃了一半多一个,第二天也是吃掉剩下香蕉的一半多一个,到了第十天,香蕉只剩下了1个。问:猴子第一天摘了多少香蕉?

四:斐波拉切数求前10个数的和

斐波拉切数是一个数列,其中每个数字都是前两个数字之和。数列的前几个数字是:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987... 

[root@localhost ~]# vim fblq.sh

#!/bin/bash
a=1
b=1
c=0
for i in {1..10}
do
  echo $a
  c=$[c+a]
  sum=$[a+b]
  a=$b
  b=$sum
done
echo $c

 五:随机生成8位数的密码

[root@localhost ~]# vim mm.sh

#!/bin/bash
q='123456789abcdef'
for i in {1..8}
do
 a=$[RANDOM % ${#q}]
 b=${q:a:1}
 passwd+=$b
done
echo "生成的密码为:" $passwd

 

六:二进制转换

(1)余数倒排法

 (2)减法正排法

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

(1)for循环

[root@localhost ~]# vim zh.sh

#!/bin/bash
sum=0
for ((i=1;i<=100;i++))
do
sum=$[sum + i ]
done
echo $sum 
~            

 

 (2)until循环

[root@localhost ~]# vim zh.sh

#!/bin/bash
i=0;b=0
until [ $i -eq 101 ]
do
    let b+=i
    let i++
done
echo $b

 

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

[root@localhost ~]# vim aa.sh

#!/bin/bash
read -p "请输入一个整数:" num
#设置变量i等于1,i小于等于变量num,变量i每次循环自加1
for ((i=1;i<=num;i++))
do
#变量sum等于变量sum加变量i
 sum=$[sum + i]
done
echo $sum

 

九:求从1到100所有整数的偶数和、奇数和

(1)方法一

[root@localhost ~]# vim xh.sh

#!/bin/bash
#a为偶数的变量,b为奇数变量
a=0
b=0
#变量i等于1,i小于等于100,每次循环自加1
#!/bin/bash
#a为偶数的变量,b为奇数变量
a=0
b=0
#变量i等于1,i循环100次,每次循环自加1
for ((i=1;i<=100;i++))
do
#判断变量i的取余等于0
   if [ $(($i % 2)) -eq 0 ]
   then
#取余为0,则偶数和为$a加$i
      a=$(($a+$i))
#取余不等于0,则奇数和为$b加$i
   else
      b=$(($b+$i))
   fi
done
echo "偶数和为:" $a
echo "奇数和为:" $b

 

 (2)方法二

[root@localhost ~]# vim xh2.sh

#!/bin/bash
#变量a为偶数变量
a=0
#设置i等于2,循环100次,每次循环自加2
for ((i=2;i<=100;i+=2))
do
#用$a加$i的变量值赋值给变量a
a=$(($a+$i))
done
echo "偶数和为:" $a

#变量b为奇数变量
b=0
#设置i等于1,循环99次,每次循环自加2
for ((i=1;i<=99;i+=2))
do
#用$b加$i的变量值赋值给变量b
b=$(($b+$i))
done

 

 

十: 用户输密码问题

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

[root@localhost ~]# vim mima2.sh

#!/bin/bash
a=123456
#设置变量i等于1,i<=3的意思可以理解为循环3次,每次循环i自加1
for ((i=1;i<=3;i++))
do

read -p "请输入正确的密码:" num
#如果变量a等于变量num
    if [ "$a" == "$num" ]
      then
      echo "密码输入正确"
#密码输入正确则直接退出       
         exit
      else
      echo "密码输入错误,请重新输入"
    fi
done
echo "警告:已错误3次"

 

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

(1)方法一

[root@localhost ~]# vim ejz.sh

#!/bin/bash
read -p "请输入ip地址:" ip
#awk -F.意思为指定.分割符,{print $1} 为$ip第一部分为变量a
a=$(echo "$ip" | awk -F. '{print $1}')
#{print $2} 为$ip第二部分为变量b
b=$(echo "$ip" | awk -F. '{print $2}')
#{print $3} 为$ip第三部分为变量c
c=$(echo "$ip" | awk -F. '{print $3}')
#{print $4} 为$ip第四部分为变量d
d=$(echo "$ip" | awk -F. '{print $4}')

#循环8次
for i in {1..8}
do
#对4个变量进行二进制转换后的赋值
  num1=$[a % 2]$num1
  let a=$[a / 2]
  num2=$[b % 2]$num2
  let b=$[b / 2]
  num3=$[c % 2]$num3
  let c=$[c / 2]
  num4=$[d % 2]$num4
  let d=$[d / 2]
done
#按照顺序将变量进行转换输出
echo $num1.$num2.$num3.$num4

 (2)方法二

[root@localhost ~]# vim ejz2.sh

#!/bin/bash
read -p "请输入IP地址:" ip
#设置变量b
b=0
#用IFSB对$IFS进行复制
IFSB=$IFS
#对IFS进行重新赋值,将'.'加入,识别以.分割
IFS=$IFS'.'

for a in `echo $ip`
do
   for i in {128,64,32,16,8,4,2,1}
   do
#通过减法正排进行二进制换算
      NUM=$[$a -$i]
#进行判断,$NUM是否小于0
      if [ $NUM -lt 0 ]
      then
#小于0,输出0
          echo -n "0"
#不小于0时,输出1
      else
          echo -n "1"
          a=$NUM
      fi
   done
#b每次循环自加1
       let b+=1
#b小于4,输出 “.”
       if [ $b -lt 4 ]
       then
          echo -n "."
       fi
done
echo

 

十二:查看文件是否改动过

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

[root@localhost ~]# vim test.sh

#!/bin/bash
#设置变量i,路径必须用绝对路径
for i in $(ls /root/test)
do
#将test文件校验核的第一部分设为sum_now变量
 sum_now=$(md5sum /root/test/$i | awk '{print $1}')
#在md5.txt文件中找到$i的第一部分的校验核,将其设为变量sum_old
 sum_old=$(grep $i /root/md5.txt | awk '{print $1}')

#将$sum_now和$sum_old两个变量进行比较,两个变量不等于时
  if [ "$sum_now" != "$sum_old" ]
  then
#进行提示
    echo "$i文件内容被改动!"
  fi
done

 

十三: 写个逛淘宝选购商品脚本

每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

[root@192 ~]# vim tb.sh

#!/bin/bash
#定义逛店次数变量 i
i=1
#定义购物总额变量 sum
sum=0
#死循环
while true
do
        echo "来到第$i家商店门口"
        read -p "是否进入看看(yes/no)" doing
        until [ $doing = "no" ]
        do
                echo "1:衣服¥500"
                echo "2:裤子¥400"
                echo "3:鞋子¥350"
                echo "4:帽子¥150"
                echo "5:袜子¥50"
                echo "3:鞋子¥350"
                echo "4:帽子¥150"
                echo "5:袜子¥50"
                echo "6:放弃购买"
                read -p "请选择需要购买的商品序列:" num
                case $num in
#选项1:输出衣服购买成功,$sum加500
                1)
                        echo "衣服购买成功"
                        let sum+=500
                        ;;
                2)
                        echo "裤子购买成功"
                        sum=$[sum+=400]
                        ;;
                3)
                        echo "鞋子购买成功"
                        sum=$[sum+=350]
                        ;;
                4)
                        echo "帽子购买成功"
                        sum=$[sum+=150]
                        ;;
                5)
                    echo "袜子购买成功"
                        sum=$[sum+=50]
                        ;;
                6)
                        echo "放弃购买"
            ;;
                *)
                    echo "输入错误"
                esac
                read -p "是否继续在这家店购物(yes/no)" doing
        done

        read -p "是否继续逛街(yes/no)" going
        if [ $going = "yes" ]
        then
#输入yes,会继续进行循环,i自加1,no则直接退出
                let i++
        else
                break
        fi
done
echo -e "一共经过$i家店。\n合计购物总价:$sum。"

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

[root@192 ~]# vim hjbl.sh

#!/bin/bash
#备份IFS,将":"加入重新赋值的IFS,可识别":"
IFSB=$IFS
IFS=$IFS':'

for i in $PATH
do
  echo $i
  for a in $(ls $i)
  do
#进行判断,需补全目录名,-f 测试是否为文件,-x 测试是否有执行权限 
    if [ -f "${i}/${a}" ]  && [ -x "${i}/${a}" ]
    then
      echo "  $a"
    fi
  done
done

#还原IFS
IFS=$IFSB

 运行脚本,输出成功。

 

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

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

相关文章

Google - ISLR 比赛总结

引言 本篇主要想总结一下最近打的GISLR比赛&#xff0c;本来是没想写的&#xff0c;比赛前期感觉赛题很有意思&#xff0c;做了eda以及根据一些base改了改自己的方案&#xff0c;取得了还不错的结果&#xff0c;但因为中途被各种琐事缠身&#xff0c;发生了很多变故&#xff0…

【Linux】Libevent库

Libevent——高性能I/O框架库 底层封装了select&#xff0c;poll&#xff0c;epoll&#xff0c;便于使用 I/O框架库以库函数的形式&#xff0c;封装了较为底层的系统调用&#xff0c;给应用程序提供了一组更便于使用的接口。 特点&#xff1a;1.跨平台&#xff0c;2.统一事件源…

c++面向对象之封装、继承、和多态

一、封装 把客观事物封装成类&#xff0c;而且可以把自己的数据和方法设置为只能让可信的类或者对象操作&#xff0c;对不可信的信息进行隐藏&#xff08;利用public,private,protected,friend)实现 二、继承 2.1类与类的关系 has-a &#xff1a;描述一个类由多个部件类构成…

SpringCloud全面学习笔记之初尝美妙篇

目录 前言初识微服务单体架构分布式架构微服务架构初见SpringCloud微服务治理分布式服务架构案例 微服务组件及使用Eureka注册中心提供者和消费者Eureka的结构和作用搭建Eureka服务注册服务服务发现Eureka注册服务总结 Ribbon负载均衡原理负载均衡原理负载均衡策略懒加载 Nacos…

Qt quick基础2(包含平移旋转放缩以及qml控件大写开头啊)

Qt quick基础2&#xff08;包含平移旋转放缩以及qml控件大写开头啊&#xff09; 目录 Qt quick基础2&#xff08;包含平移旋转放缩以及qml控件大写开头啊&#xff09;前言简单的平移、旋转和放缩其他元素的一些基本使用qml文件作为控件时&#xff0c;务必以大写字母开头命名小结…

力扣题库刷题笔记682-棒球比赛

1、题目如下&#xff1a; 2、个人Python代码实现如下&#xff1a; 代码如下&#xff1a; class Solution: def calPoints(self, operations: List[str]) -> int: i 0 #用于遍历元素的下标 while i < len(operations): …

【Python入门篇】——Python基础语法(数据类型与数据类型转换)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…

数据结构与算法导学

文章目录 数据结构和算法导学认识数据结构认识算法总结 数据结构和算法导学 程序 数据结构 算法 认识数据结构 什么是数据结构&#xff1f; 数据结构是一门研究计算机中数据存储和数据操作的学科。 为什么要学习数据结构&#xff1f; 学习数据结构能让我们写出更加优秀的代码…

关于在线帮助中心你需要思考以下几个问题

搭建帮助中心是大多数企业都在尝试做的事情&#xff0c;它的重要性对于企业来说不言而喻。现在对于企业来说&#xff0c;搭建帮助中心或许不是什么难事&#xff0c;但是关于帮助中心&#xff0c;有几个问题需要思考清楚&#xff0c;才能让其发挥最大的价值。 一、如何让用户养成…

CAS 原子操作类

CAS 原子类 java.util.concurrent.atomic 是什么 CAS compare and swap的缩写&#xff0c;中文翻译比较并交换&#xff0c;实现并发算法时常用的一种技术 它包含三个操作数–内存位置、预期原值及更新值 执行CAS操作时&#xff0c;将内存位置的值与预期原值比较 如果相匹…

网络协议与攻击模拟-05-ICMP协议

ICMP 协议 1、理解 ICMP 协议 2、理解 ICMP 重定向 3、会使用 wireshark 分析 ICMP 重定向流量实验 一、 ICMP 基本概念 1、 ICMP 协议 Internet 控制报文协议&#xff0c;用于在 IP 主机、路由器之间传递控制消息&#xff0c;控制消息指网络通不通、主机是否可达、路由是否…

荔枝派Zero(全志V3S)驱动开发之hello驱动程序

文章目录 前言一、设备驱动分类二、字符设备驱动简介三、字符设备驱动开发1、APP打开的文件在内核中如何表示2、编写驱动程序的步骤3、hello 驱动程序编写<1>、试验程序编写<2>、测试程序编写<3>、编写 Makefile<4>、编译 3、运行测试<1>、上传程…

PyTorch实战4:猴痘病识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营-第P4周&#xff1a;猴痘病识别&#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 目录 一、搭建CNN网络结构1、原文网络结构1.1、网络…

4。计算机组成原理(2)存储系统

嵌入式软件开发&#xff0c;非科班专业必须掌握的基本计算机知识 核心知识点&#xff1a;数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统 这一部分主要讲解了CPU的组成和扩容、CPU与存储器&#xff08;主存、辅存、缓存&#xff09;的连接 一 存储…

C++笔记——第十六篇 异常

目录 1.C语言传统的处理错误的方式 2. C异常概念 3. 异常的使用 3.1 异常的抛出和捕获 在函数调用链中异常栈展开匹配原则 3.2异常安全 4.异常的优缺点 1.C语言传统的处理错误的方式 传统的错误处理机制&#xff1a; 1. 终止程序&#xff0c;如assert&#xff0c;缺陷&a…

飞腾ft2000-麒麟V10-SP1安装Docker、运行gitlab容器

目录 一、安装及配置docker 1、卸载docker相关包及删除相关配置文件 2、安装二进制docker 1.下载软件包 2.解压 3.修改镜像加速地址 4.修改profile文件 5.启动docker 6.docker常用命令 二、安装并启动gitlab镜像 1.安装gitlab镜像 1.查询满足使用需求的gitlab版本 2…

很佩服的一个Google大佬,离职了。。

这两天&#xff0c;科技圈又有一个突发的爆款新闻相信不少同学都已经看到了。 那就是75岁的计算机科学家Geoffrey Hinton从谷歌离职了&#xff0c;从而引起了科技界的广泛关注和讨论。 而Hinton自己也证实了这一消息。 提到Geoffrey Hinton这个名字&#xff0c;对于一些了解过…

使用 Mercury 直接从 Jupyter 构建 Web 程序

动动发财的小手&#xff0c;点个赞吧&#xff01; 有效的沟通在所有数据驱动的项目中都至关重要。数据专业人员通常需要将他们的发现和见解传达给利益相关者&#xff0c;包括业务领导、技术团队和其他数据科学家。 虽然传达数据见解的传统方法&#xff08;如 PowerPoint 演示文…

Oracle SQL优化相关数据项

要掌握SQL调优技术,就需要能读懂SQL语句的执行计划,要想读懂SQL语句的执行计划,不仅需要准确理解SQL语句执行计划中各操作及其含义,还需要准确理解SQL语句执行计划中各数据项的含义。本书第7章中,已经对SQL语句执行计划中各个操作的含义做了详尽的阐述,本章中,我们将对S…

爱普特APT32F110x系列时钟介绍

最近要用APT32F110x做一些开发&#xff0c;顺便学习一下。 APT32F110x 是由爱普特推出的基于平头哥&#xff08;T-Head Microsystems&#xff09;CPU 内核开发的 32 位高性能低成本单片机。 APT32F1104x基于嵌入式 Flash 工艺制造&#xff0c;内部丰富的模拟资源&#xff0c;包…