shell编程之循环语句与函数

一 echo命令

echo -n   表示不换行输出
echo -e   表示输出转义符


常用的转义符

二 date

date查看当前系统时间

-d 你描述的日期,显示指定字符串所描述的时间,而非当前时间

%F 完整日期格式,等价于 %Y-%m-%d

% T 时间(24小时制)(hh:mm:ss)

[root@localhost ~]# date -d '-1 day' +%F 
2021-10-21

[root@localhost ~]# date  +%F 
2021-08-19


[root@localhost ~]# date -d '1 day ' +%F-%T
2021-08-20-23:28:42


[root@localhost mnt]# date -d "-3 day"      前三天
2021年 08月 18日 星期三 11:30:15 CST


[root@localhost mnt]# date -d "+3 day"  后三天
2021年 08月 18日 星期三 11:30:15 CST


[root@localhost data]#date -d '1 day ' +%F'     '%T
2021-10-22     00:45:37

三 日历


[root@localhost data]#cal 2021
#查看日历

[root@localhost data]#cal 9 1752

 

四 $RANDOM 取值范围:0-32767

[root@test1 ~]# echo $[$RANDOM%50]
37
[root@test1 ~]# echo $[$RANDOM%20]
15

 五 seq

[root@localhost data]#seq 1 2 10        #从1 开始 步长为2  到10 为止
1
3
5
7
9
[root@localhost data]#seq  9 -1 1
9
8
7
6
5
4
3
2
1


六 循环的命令:for, while, until

1 for    列表循环

for 变量名 in   {list}
do
    command
done

2 不带列表循环

for 变量名 
do
    command
done

3  while

相对于for,需要知道循环次数

我们只知道停止条件,不知道次数,就需要使用while,直到达到条件

while循环 :1、语法结构 2、死循环

while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环

实验:1元才是正确答案 

[root@localhost ~]#cat mcb.sh
#!/bin/bash
p=`echo $[ RANDDM%1000+1 ]`
time=0while true
do
let time++
read -p "请输入你猜测的价格 (1-1000):" h
if [ $h -eq $p ]
then
echo "恭喜你猜中了,你一共猜测了$time次"
exit
elif [ $h -gt $p ]
then
echo "你猜测的价格过高"
else
echo "你猜测的价格过低"
fi
done

 

4 双重循环及跳出循环

  • break跳出单个循环 break n 数字数字是几代表跳出n层循环

  • continue终止某次循环中的命令,但是不会完全终止命令

  • exit 直接退出脚本

5 until

until 循环与 while 循环类似,while 循环能实现的脚本 until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而 until 则是在条件为假时执行循环

until 循环语句的语法结构如下所示

until 条件测试操作
do
命令序列
done

七 for-实验:①九九乘法表

#!/bin/bash
# j行数   i管列数
for j in  {1..9}
dofor i in  `seq  $j`doecho  -e   "${i}x${j}=$[i*j] \c"doneecho
done

另一种

#!/bin/bash
for j in {1..9}
dofor  i in `seq $j`do echo  -ne  "$j*$i=$[ $j*$i ]\t"done
echo
done

 

实验②测试ping 通

#!/bin/bash
for i in   {1..254}
do
{
ping -c2 -W2 192.168.11.$i  &>/dev/null  && echo "$i is online" >> data/hostonline.txt || echo "$i is offline" >> data/hostoffline.txt
} &
done

另一个

[root@localhost ~]# cat mcb8.sh
#!/bin/bash
read -p  "请输入你需要测试的网段,格式为(192.168.11.):" ip 
for i in {1..254}
do
{
ping -c2 -W2 $ip$i  &>/dev/nullif [ $? -eq 0  ]thenecho "$ip$i is online"echo $ip$i >> host.txtelseecho "$ip$i is offline"fi
}&
done
wait

实验③  改变颜色

[root@localhost data]# echo -e "\E[1;$[RANDOM%7+31]m 称霸武林 \E[0"


实验④ 求和

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

另一种方法

#!/bin/bash
#by even 2018
sum=0
for i in `seq 1 100`
dosum=$[$i+$sum]
done
echo  $sum

 

另一种

#!/bin/bash
#
i=100
a=1
until [ $i -le 1 ];do  #循环条件 i<=1
a=$(( $a + $i ))
i=$(( $i - 1 ))
done
echo $a

 

 实验⑤改名字

[root@localhost data]# cd /
[root@localhost /]# mkdir data
[root@localhost /]# bash mcb13.sh
bash: mcb13.sh: 没有那个文件或目录
[root@localhost /]# cd
[root@localhost ~]# cd data/
[root@localhost data]# mv mcb13.sh  /data
[root@localhost data]# cd /data/
[root@localhost data]# ls
mcb13.sh
[root@localhost data]# 
[root@localhost data]# ls
mcb13.sh***************************[root@localhost ~]# cd data/
[root@localhost data]# mv mcb13.sh  /data
[root@localhost data]# cd /data/
[root@localhost data]# ls
mcb13.sh**********************************[root@localhost data]# cat mcb13.sh
#!/bin/bash
for i in `cat /data/name.txt`
do
id $i
if [ $? -eq 0 ];then
echo "用户已存在"
else
useradd $i[root@localhost data]# cat name.txt
马传斌
马传斌2
马传斌3
ABCD
EFGihf
**************************echo 123 | passwd  --stdin  $i
fi
done
***********************[root@localhost data]# bash mcb13.sh
id: 马传斌: no such user
useradd:无效的用户名“马传斌”
passwd:未知的用户名 马传斌。
id: 马传斌2: no such user
useradd:无效的用户名“马传斌2”
passwd:未知的用户名 马传斌2。
id: 马传斌3: no such user
useradd:无效的用户名“马传斌3”
passwd:未知的用户名 马传斌3。
id: ABCD: no such user
更改用户 ABCD 的密码 。
passwd:所有的身份验证令牌已经成功更新。
id: EFGihf: no such user
更改用户 EFGihf 的密码 。
passwd:所有的身份验证令牌已经成功更新。

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

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

相关文章

1.26学习总结

连通性判断 DFS连通性判断步骤&#xff1a; 1.从图上任意一点u开始遍历&#xff0c;标记u已经走过 2.递归u的所有符合连通条件的邻居点 3.递归结束&#xff0c;找到了的所有与u的连通点&#xff0c;就是一个连通块 4.然后重复这个步骤找到所有的连通块 BFS连通性判断步骤…

linux 查看zookeeper server运行版本号

zookeeper版本查看运行命令&#xff1a;echo stat|nc localhost 2181 显示如下图所示&#xff1a; Zookeeper version: 3.4.5-cdh6.3.2--1, built on 11/08/2019 13:15 GMT Clients: /127.0.0.1:44814[0](queued0,recved1,sent0) Latency min/avg/max: 0/0/0 Received: 9 Se…

防火墙的NAT

目录 1. NAT 概念解析 2. 配置NAT策略&#xff1a; 1. NAT 概念解析 静态NAT --- 一对一 动态NAT --- 多对多 NAPT --- 一对多的NAPT --- easy ip --- 多对多的NAPT 服务器映射 源NAT --- 基于源IP地址进行转换。我们之前接过的静态NAT&#xff0c;动态NAT&#xff0c;NAPT都属…

*【艺恩娱数】Python爬虫+数据分析可视化中国影院票房*¶

文章目录 一、记得登入才能看到所有的数据二、使用步骤艺恩数据可视化艺恩影院票房Top10艺恩影院票房销售额对比艺恩影院票房省份人次分析艺恩影院场次top10榜单 这个里面的影院名称&#xff0c;省份&#xff0c;城市&#xff0c;票房&#xff0c;场次&#xff0c;人次&#xf…

ESXI 本地和虚拟机之间可以自由复制和粘贴

文章目录 ESXI 本地和虚拟机之间可以自由复制和粘贴 ESXI 本地和虚拟机之间可以自由复制和粘贴 web访问esxi&#xff0c;然后&#xff1a; 1、右击新建的虚拟机&#xff0c;确保是在关机状态下&#xff0c;点击编辑设置 2. 找到 虚拟机选项→高级→常规→配置参数 3、点击添加…

Unity3d C#实现三维场景中图标根据相机距离动态缩放功能

前言 如题的需求&#xff0c;其实可以通过使用UI替代场景中的图标来实现&#xff0c;不过这样UI的处理稍微麻烦&#xff0c;而且需要在图标上添加粒子特效使用SpriteRender更方便快捷。这里就根据相机离图标的位置来计算图标的缩放大小即可。这样基本保持了图标的大小&#xf…

Vulnhub靶场DC-3

本机192.168.223.128 靶机192.168.223.139 目标发现nmap -sP 192.168.223.0/24 端口扫描nmap -p- 192.168.223.139 之开启了一个80端口 看一下是什么服务 nmap -sV -p- -A 192.168.223.139是一个apache服务&#xff0c;joomla模板 看一下web 没什么有用信息。 扫描一下后台…

华为HCIP Datacom H12-831 卷18

判断题 1、对于同一个MAC地址,手工配置的MAC表项优先级高于动态的表项,某二层报文的源MAC地址已经绑定在了交换机的GEO/0/1接口,当交换机从GEO/0/2收到该报文时,会丢弃该报文 A 对 B 错 正确答案 A 解析:为了提高接口安全性,网络管理员可手工在MAC地址表中加入特定M…

银行数据仓库体系实践(3)--数据架构

狭义的数据仓库数据架构用来特指数据分布&#xff0c;广义的数据仓库数据架构还包括数据模型、数据标准和数据治理。即包含相对静态部分如元数据、业务对象数据模型、主数据、共享数据&#xff0c;也包含相对动态部分如数据流转、ETL、整合、访问应用和数据全生命周期管控治理。…

在 Vue 项目中,可以通过设置不同的环境变量来区分不同的环境,例如本地开发环境、测试环境和生产环境。以下是设置环境变量的步骤:

1、在src下新建三个文件夹 &#xff08;.env.local、.env.test 和 .env.prod&#xff09; 2、配置信息 .env.local VUE_APP_ENVlocal VUE_APP_API_URLhttp://localhost:8080.env.test VUE_APP_ENVtest VUE_APP_API_URLhttp://124.220.110.203:9090/ .env.prod VUE_APP_…

Android源码设计模式解析与实战第2版笔记(一)

第一章 走向灵活软件之路 — 面向对象的六大原则 优化代码的第一步 — 单一职责原则 单一职责原则的英文名称是Single Responsibility Principle&#xff0c;缩写是SRP。 SRP&#xff1a;就一个类而言&#xff0c;应该仅有一个引起它变化的原因。 一个类中应该是一组相关性很…

Redis创建集群

主要内容 搭建redis集群 能力目标 搭建redis集群 一 应用场景 为什么需要redis集群&#xff1f; 当主备复制场景&#xff0c;无法满足主机的单点故障时&#xff0c;需要引入集群配置。 一般数据库要处理的读请求远大于写请求 &#xff0c;针对这种情况&#xff0c;我们优…

ES 分布式搜索的运行机制

ES 分布式搜索的运行机制-腾讯云开发者社区-腾讯云 ES 分布式搜索的运行机制 ES 有两种 search_type 即搜索类型&#xff1a; •query_then_fetch &#xff08;默认&#xff09;•dfs_query_then_fetch query_then_fetch query_then_fetch 1.用户发起搜索&#xff0c;请求…

Python的hashlib模块:7种加密算法深入剖析

目录 一、引言 二、哈希算法简介 三、hashlib模块中的加密算法 MD5 SHA1 SHA224/SHA256/SHA384/SHA512 SHA3 其他算法&#xff1a; 四、加密算法比较与选择 五、实际应用与注意事项 六、总结 本文将深入探讨Python的hashlib模块&#xff0c;重点解析其中的七种加密算…

【GitHub项目推荐--GitHub 上的高仿项目】【转载】

整理了现在比较热门 App 的高仿项目&#xff0c;这些项目都是有「recently updated」&#xff0c;而不是年代久远不再维护的项目。包括高仿微信、微博、B站、斗鱼、抖音、美团、头条、掘金等等。 这些项目涉及的技术栈有 Vue、Flutter 等等&#xff0c;看这些高仿项目的源码有…

element-ui 树形控件 实现点击某个节点获取本身节点和底下所有的子节点数据

1、需求&#xff1a;点击树形控件中的某个节点&#xff0c;需要拿到它本身和底下所有的子节点的id 1、树形控件代码 <el-tree:data"deptOptions"node-click"getVisitCheckedNodes"ref"target_tree_Speech"node-key"id":default-ex…

Discuz论坛搭建:Linux宝塔面板一键部署,固定地址畅享公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装基础环境二. 一键部署Discuz三. 安装cpolar工具四. 配置域名访问Discuz…

vue3 根据点击位置,实现一个用户头像弹框定位

vue3 根据点击位置&#xff0c;实现一个用户头像弹框定位 需求背景 最近在做直播后台&#xff0c;涉及到对用户的一些操作&#xff0c;比如关注/取关/禁言/踢出直播间。多个地方都要用&#xff0c;需要封装一个弹框组件 效果图 实现过程分析 根据点击元素&#xff0c;获取元…

HTML - 介绍

一.简介 HTML&#xff0c;超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。我们可以使用HTML建立自己的WEB网站或特定页面。HTML运行在浏览器上&#xff0c;由浏览器解析。 ⚠️注意&#xff1a;HTML文件的后缀…

node学习过程中的终端命令

冷的哥们手真tm冷&#xff0c;打字都是僵的&#xff0c;屮 目录 一、在学习nodejs过程中用到的终端命令总结 一、在学习nodejs过程中用到的终端命令 node -v nvm install 20.11.0 nvm list nvm list available nvm on nvm -v nvm use 20.11.0 node加要运行的js文件路径 ps&a…