经典常用的脚本讲解

news/2024/11/29 4:54:01/

目录

一: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}
doecho $ac=$[c+a]sum=$[a+b]a=$bb=$sum
done
echo $c

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

[root@localhost ~]# vim mm.sh#!/bin/bash
q='123456789abcdef'
for i in {1..8}
doa=$[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 ]
dolet b+=ilet 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加变量isum=$[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的取余等于0if [ $(($i % 2)) -eq 0 ]then
#取余为0,则偶数和为$a加$ia=$(($a+$i))
#取余不等于0,则奇数和为$b加$ielseb=$(($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++))
doread -p "请输入正确的密码:" num
#如果变量a等于变量numif [ "$a" == "$num" ]thenecho "密码输入正确"
#密码输入正确则直接退出       exitelseecho "密码输入错误,请重新输入"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]$num1let a=$[a / 2]num2=$[b % 2]$num2let b=$[b / 2]num3=$[c % 2]$num3let c=$[c / 2]num4=$[d % 2]$num4let 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`
dofor i in {128,64,32,16,8,4,2,1}do
#通过减法正排进行二进制换算NUM=$[$a -$i]
#进行判断,$NUM是否小于0if [ $NUM -lt 0 ]then
#小于0,输出0echo -n "0"
#不小于0时,输出1elseecho -n "1"a=$NUMfidone
#b每次循环自加1let b+=1
#b小于4,输出 “.”if [ $b -lt 4 ]thenecho -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_oldsum_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
doecho "来到第$i家商店门口"read -p "是否进入看看(yes/no)" doinguntil [ $doing = "no" ]doecho "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 "请选择需要购买的商品序列:" numcase $num in
#选项1:输出衣服购买成功,$sum加5001)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 "输入错误"esacread -p "是否继续在这家店购物(yes/no)" doingdoneread -p "是否继续逛街(yes/no)" goingif [ $going = "yes" ]then
#输入yes,会继续进行循环,i自加1,no则直接退出let i++elsebreakfi
done
echo -e "一共经过$i家店。\n合计购物总价:$sum。"

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

[root@192 ~]# vim hjbl.sh#!/bin/bash
#备份IFS,将":"加入重新赋值的IFS,可识别":"
IFSB=$IFS
IFS=$IFS':'for i in $PATH
doecho $ifor a in $(ls $i)do
#进行判断,需补全目录名,-f 测试是否为文件,-x 测试是否有执行权限 if [ -f "${i}/${a}" ]  && [ -x "${i}/${a}" ]thenecho "  $a"fidone
done#还原IFS
IFS=$IFSB

 运行脚本,输出成功。

 


http://www.ppmy.cn/news/62778.html

相关文章

数组排序sort()方法

sort() 方法对数组的项目进行排序。 排序顺序可以是按字母或数字&#xff0c;也可以是升序&#xff08;向上&#xff09;或降序&#xff08;向下&#xff09;。 默认情况下&#xff0c;sort() 方法将按字母和升序将值作为字符串进行排序。 一、语法 array.sort(compareFunct…

【SWAT水文模型】SwatWeather软件使用教程

SwatWeather软件使用教程 1 SwatWeather天气模型发生器1.1 数据输入 2 各功能介绍2.1 计算降水2.2 计算气温2.3 计算辐射2.4 计算风速2.5 计算露点 参考 1 SwatWeather天气模型发生器 SwatWeather.exe 软件只要输入一定格式要求的文件&#xff0c;就可以根据提示进行所需 数据…

React初识

概述 React 是用于构建用户界面的 JS 库。React 是 MVC 中薄薄的一层 V&#xff0c;把数据变成 DOM 显示出来&#xff0c;它只关注表现层。React 原生就是函数 虚拟 DOM 特点 单向数据流 兼容性更好&#xff1a;支持IE8 JSX语法&#xff1a;处理数据和 DOM 之间的关系&…

画图以及代码分析结合的循环队列的实现

循环队列的实现 概念以及结构实现初始化判空判满入队出队从队头获得元素从队尾获得元素释放 概念以及结构 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”…

17.provide.inject.下

学习要点&#xff1a; 1.provide.inject 本节课我们来要了解一下 Vue3.x 中的 provide.inject(提供.注入)功能&#xff1b; 一&#xff0e;provide.inject 1. 使用 Composition API&#xff0c;也是使用 import 导入来实现的&#xff1b; // App.vue import { ref, provide } f…

uni-app nvue页面中使用video视频播放组件

我遇到的问题是&#xff0c;在nvue页面引用video组件&#xff0c;然后啥也没显示的&#xff0c;显示了无法控制播放&#xff0c;折腾了好久&#xff0c;在这里记录下来&#xff01;希望可以帮助到需要的人 我的代码是这样的&#xff08;src换成官方的举例&#xff09; <vi…

Vue面试题:30道含答案和代码示例的练习题

Vue中的双向数据绑定是怎么实现的&#xff1f; 双向数据绑定通过使用v-model指令实现。v-model指令会在表单元素上创建一个监听器&#xff0c;在用户输入时实时更新Vue实例的数据&#xff0c;并且在Vue实例数据变化时更新表单元素的值。 如何在Vue中定义一个方法&#xff1f;…

【英语】大学英语CET考试,阅读部分1(阅读概述,SectionC仔细阅读140)

文章目录 1、阅读概述1.1 考试概况&#xff1a;大纲解读备考策略1.2 做题原则&#xff1a;定位1.3 标点符号和句子逻辑1.4 一级词汇 2、细节题&#xff08;10题占9题&#xff09;2.1 逻辑关系&#xff08;并列和递进&#xff0c;同一方向&#xff09;2.2 逻辑关系&#xff08;转…