Shell脚本for循环小实验

2023-11-11

目录

1、计算1-100的和

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

3、 从1到100所有整数的偶数和、奇数和

4、执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码 

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

6、检测指定范围主机是否通信,将通信的主机ip输出到文件host_ip中

7、用户名存放在users .txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则接设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码

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

9、生成8位数密码

10、将0-255之间的十进制数转换为二进制数


1、计算1-100的和

[root@localhost for]# vim 1.sh

#!/bin/bash
#计算1-100的和
sum=0
for ((i=0;i<=100;i++))
do
sum=$[$sum + i ]
done
echo "1到100的和为:$sum"
[root@localhost for]# bash 1.sh
1到100的和为:5050

 

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

[root@localhost for]# vim 2.sh

#!/bin/bash
#提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
read -p "请输入小于一个0-100的整数:" num
sum=0
if [ $num -le 100 ];then
  for((i=1;i<=$num;i++))
  do
    sum=$[ sum + i]
  done
    echo "1-$num的和为:$sum"
else
  echo "输入错误,请输入小于100的整数"
fi

[root@localhost for]# bash 2.sh
请输入小于一个0-100的整数:4     
1-4的和为:10

 

3、 从1到100所有整数的偶数和、奇数和

[root@localhost for]# vim 3.sh

# !/bin/ bash
SUM=0
sum=0
for i in {1..100}
do
  a=$[ i % 2 ]
  if [ $a -eq 0 ] ;then
    SUM=$[ SUM + i ]
  else
    sum=$[ sum + i]
  fi
  #sum=$[$sum + $i]
  #let sum+=$i
done
echo "1到100的奇数和为$sum"
echo "1到100的偶数和为$SUM"
[root@localhost for]# bash 3.sh
1到100的基数和为2500
1到100的偶数和为2550

 

4、执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码 

[root@localhost for]# vim 4.sh

#!/bin/bash
#执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户>并设立其密码
read -p "请输入你要创建的用户:" user
cat /etc/passwd |grep $user &> /dev/null
if [ $? -eq 0 ];then
  echo "${user}用户已存在,请重新输入"
else
  read -p "请输入创建用户的密码:" pass
  useradd $user
  echo "$pass" | passwd --stdin $user
fi
[root@localhost for]# bash 4.sh
请输入你要创建的用户:my
my用户已存在,请重新输入
[root@localhost for]# bash 4.sh
请输入你要创建的用户:yy
请输入创建用户的密码:123123
更改用户 yy 的密码 。
passwd:所有的身份验证令牌已经成功更新。

或者另一种方法
#!/bin/bash
#执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
read -p "请输入你要创建的用户:" user

useradd $user &> /dev/null ##如果所输入的用户已存在 useradd会执行出错
if [ $? -ne 0 ];then  ##如果创建用户时出错 则返回值$?不为0 就输入用户存在 
  echo "${user}用户已存在,请重新输入"
else
  read -p "请输入创建用户的密码:" pass
  echo "$pass" | passwd --stdin $user
fi

 

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

[root@localhost for]# vim 5.sh

#!/bin/bash
#用户输入密码,脚本判断密码是否正确,输入正确提示正确信息,连续输错3次则报警
mm=123123
for ((i=1;i<=3;i++))
do
  read -p "请输入用户密码:" pwd
  if [ $mm -eq $pwd ];then
    echo "密码输入正确"
    exit 0   ##退出脚本并且返回码为0
   else
     echo "密码输入不正确,请重新输入"
  fi
done
echo "警告密码错误三次"
[root@localhost for]# bash 5.sh
请输入用户密码:123
密码输入不正确,请重新输入
请输入用户密码:123
密码输入不正确,请重新输入
请输入用户密码:123123
密码输入正确
[root@localhost for]# bash 5.sh
请输入用户密码:123123
密码输入正确

6、检测指定范围主机是否通信,将通信的主机ip输出到文件host_ip中

[root@localhost for]# vim 6.sh

#!/bin/bash
#检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
for ((i=100;i<=110;i++))
do
  ping -c 2 -w 3 192.168.52.$i &>/dev/null
  if [ $? -eq 0 ]
  then
    echo "192.168.52.$i" >>/opt/host_ip
  fi
done  
[root@localhost shell]# bash 6.sh
[root@localhost opt]# cat host_ip_online 
192.168.52.100 is online
192.168.52.110 is online

7、用户名存放在users .txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;用户存在但没设密码,则接设置密码;若该用户不存在,提示用户输入密码,建立用户并设立其密码

[root@localhost for]# vim user.txt

scx
jl
zzz
my


[root@localhost for]# vim 7.sh

#!/bin/bash
for name in `cat /root/shell/for/user.txt`
do
  cat /etc/passwd | awk -F: '{print $1}' | grep $name &> /dev/null
  if [ $? -eq 0 ];then
    echo "$name 用户已存在!"
    res=`cat /etc/shadow | grep $name | awk -F: '{print $2 }'`
    if [ "$res" == "!!" -o "$res" == "*" ];then
      read -p "$name 用户没有设置密码,请输入密码:" pswd
      echo $pswd | passwd --stdin $name
    fi
  else 
    echo "用户不存在,正在创建$name 用户....."
    useradd $name 
    read -p "请设置用户$name 的密码:" passwd1
    read -p "请再次输入用户$name 的密码:" passwd2
    if [ "$passwd1" == "$passwd2" ];then
      echo $passwd1 | passwd --stdin $name
    else
      echo "密码设置不一致"
    fi
  fi   
done
[root@localhost for]# bash 7.sh 
scx 用户已存在!
jl 用户已存在!
jl 用户没有设置密码,请输入密码:123123
更改用户 jl 的密码 。
passwd:所有的身份验证令牌已经成功更新。
用户不存在,正在创建zzz 用户.....
请设置用户zzz 的密码:123123
请再次输入用户zzz 的密码:123123
更改用户 zzz 的密码 。
passwd:所有的身份验证令牌已经成功更新。
my 用户已存在!

 

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

[root@localhost for]# vim 8.sh

#!/bin/bash
#初始密码
default=123123
for ((i=1;i<=3;i++))
do
  read -p "请输入密码:" passwd
  if [ "$passwd" == "$default" ];then
    echo "密码输入正确"
    ##结束脚本 且返回码为0
    exit 0
  else
    echo "密码输入不正确!请重新输入" 
  fi
done
echo "您的密码已连续输错3次,即将锁定!"
[root@localhost for]# bash 8.sh
请输入密码:123123
密码输入正确
[root@localhost for]# bash 8.sh
请输入密码:1231231
密码输入不正确!请重新输入
请输入密码:12312
密码输入不正确!请重新输入
请输入密码:123123
密码输入正确
[root@localhost for]# bash 8.sh
请输入密码:123
密码输入不正确!请重新输入
请输入密码:123
密码输入不正确!请重新输入
请输入密码:123
密码输入不正确!请重新输入
您的密码已连续输错3次,即将锁定!

 9、生成8位数密码

[root@localhost ~]# vim 9.sh

#!/bin/bash
#生成8位数密码
##定义密码的取值范围
String="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

##循环8次
for ((i=1;i<=8;i++))
do
  ##每次循环随机获取0到字符串长度-1的下标值
  num=$[ RANDOM % ${#String} ]
  ##进行字符串的截取,每次截取1个
  var=${String:num:1}
  ##每次追加生成的密码
  passwd+=$var
done
echo "本次生成的密码为:$passwd"
[root@localhost for]# bash 9.sh
本次生成的密码为:CRfkdaNy
[root@localhost for]# bash 9.sh
本次生成的密码为:U7m8jrPI

10、将0-255之间的十进制数转换为二进制数

方法一:使用减法

[root@localhost for]# vim 10.sh

#!/bin/bash
read -p "请输入一个0-255之间的整数:" num
##i的取值范围为:2的0次方 到 大小最接近255的2的次方
for i in {128,64,32,16,8,4,2,1}
do
#定义一个变量a a=输入的值减去i的值
  a=$[ num - i ]
#如果输入的值减i小于0那么就输出0
  if [ $a -lt 0 ];then
  #不换行输出0
    echo -n 0
#如果输入的值减i大于等于0那么就输出1
  else
  #不换行输出1
    echo -n 1
  #给num赋新值为输入的值减去i的得数
    num=$[ num - i ]
  fi
done
#换行输出
echo""

[root@localhost for]# bash 10.sh
请输入一个0-255之间的整数:234
11101010
[root@localhost for]# bash 10.sh
请输入一个0-255之间的整数:245
11110101

方法二:使用求余的方法

[root@localhost for]# vim 11.sh

#!/bin/bash
read -p "请输入一个0-255的整数值:" num
#进行8次运算
for i in {1..8}
do
  #求出输入值除以2所得的余数赋值给var
  var=$[ num % 2 ]
  #对求出来的余数进行倒序追加所取的余数
  sum=$var$sum
  #得出进入下次循环的新值
  num=$[ num /2 ]
done
#输出得到的二进制数  
echo $sum
[root@localhost for]# bash 11.sh
请输入一个0-255的整数值:44
00101100
[root@localhost for]# bash 11.sh
请输入一个0-255的整数值:245   
11110101

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell脚本for循环小实验 的相关文章

  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • GMail 421 4.7.0 稍后重试,关闭连接

    我试图找出为什么它无法使用 GMail 从我的服务器发送邮件 为此 我使用 SwiftMailer 但我可以将问题包含在以下独立代码中
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • 使用循环在 C 中管道传输两个或多个 shell 命令

    我正在尝试执行ls wc l通过 C 语言程序 而不是使用命令行 这是我当前的工作代码 int main int pfds 2 pipe pfds pid t pid fork if pid 0 The child process clos
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 在 Mono 上运行 .Net MVC5 应用程序

    我正在 Windows 上的 Visual Studio 2013 中开发 Net 4 5 1 MVC5 应用程序 现在我想知道 是否可以在Linux Ubuntu 12 04 上运行这个应用程序 可以使用OWIN吗 Owin 可以自托管运
  • Bash - 在与当前终端分开的另一个终端中启动命令的新实例

    我有一个简单的 bash 脚本 test sh 设置如下 bin bash args if args 0 check capture then watch n 1 ls lag home user capture0 watch n 1 ls
  • 静态方法的 Java 内存模型

    我来自操作系统和 C 语言背景 在代码编译时 世界很简单 需要处理和理解堆栈 堆文本部分等 当我开始学习 Java 时 我确实了解 JVM 和垃圾收集器 我对静态方法感到很有趣 根据我的理解 类的所有实例都会在堆中创建 然后被清理 但是 对
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • Mac OS X 上的 /proc/self/cmdline / GetCommandLine 等效项是什么?

    如何在不使用 argc argv 的情况下访问 Mac OS X 上的命令行 在 Linux 上 我会简单地阅读 proc self cmdline or use GetCommandLine在 Windows 上 但我找不到 Mac OS

随机推荐

  • Vue - 使用Lodash进行深拷贝

    文章目录 深浅拷贝的理解 使用lodash 深浅拷贝的理解 浅拷贝 只是将数据中所有的数据引用下来 依旧指向同一个存放地址 拷贝之后的数据修改之后 也会影响到原数据的中的对象数据 例如 Object assign 扩展运算符 深拷贝 将数据
  • 利用xpath解析器爬取豆瓣电影top250

    首先声明需要用的库 当然我还用到了os库 将工作路径修改到了我指定的路径 os chdir r C Users from lxml import etree import requests import time import json 豆
  • 潘建伟在量子纠缠领域获新突破;特斯拉起诉小米持股公司;WPS AI面向社会开放;腾讯或将发布混元大模型丨每日大事件...

    大数据产业创新服务媒体 聚焦数据 改变商业 企业动态 TikTok在爱尔兰开设数据中心 TikTok 9月5日发布声明 宣布位于爱尔兰都柏林的首个数据中心现已投入运营 开始向该中心迁移欧洲用户数据 TikTok表示 位于挪威和爱尔兰的另外两
  • PyCharm入门教程——自动导入(下)

    查看 PyCharm入门教程 自动导入 上 PyCharm 是一种Python IDE 其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具 此外 该IDE提供了一些高级功能 以用于Django框架下的专业Web开发 PyC
  • 面试过程中应注意的问题与禁忌

    面试过程中应注意的问题与禁忌 一 面试中应注意的问题 应试者要想在面试答辩中获得成功 必须注意以下几个问题 一 淡化面试的成败意识 一位面试者在面试前自认为各方面都比别人优秀 因此 他认为自己可以高枕无忧了 谁知主考官在面试中出其不意 提了
  • layui日期多选

    先引入layui的css和js html部分 div class layui inline div
  • Eclipse快捷键的使用

    ctrl 2 L这个快捷键可自动补全代码 极大提升编码效率 注 ctrl和2同时按完以后释放 再快速按L ctrl 1提示快捷键 能快速的实现光标所在行的问题 并给出一些修改方案 按键盘上的ALT 方向键 或者 就能上下移动
  • 【路径规划】基于前向动态规划算法在地形上找到最佳路径(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 汽车必须尽可能靠近目标坐标 旅行时间应尽可
  • Pycharm连接远端服务器配置【保姆级教程】

    提示 需要提前安装Pycharm专业版 可以用破解版或者学生认证一年试用期 网上有教程 文章目录 前言 软硬件环境 一 配置SSH连接服务器 1 立马遇到bug 没有出现以下问题可以跳过 2 配置本地与服务器文件同步 3 同步代码到服务器上
  • React基础教程(二):React的基本使用

    React基础教程 二 React的基本使用 1 HelloReact 1 1 引入react基础依赖包 注意点 必须要在 之前引入
  • 利用unordered_map特性求交集

    unordered map 是关联容器 含有带唯一键的键 值 pair 搜索 插入和元素移除拥有平均常数时间复杂度 元素在内部不以任何特定顺序排序 而是组织进桶中 元素放进哪个桶完全依赖于其键的哈希 这允许对单独元素的快速访问 因为一旦计算
  • 什么是Three.js?(一)

    Three js是一款运行在浏览器中的 3D 引擎 基于WebGL的API的封装 你可以用它来创造你所需要的一系列3D动画场景 如最近比较火的在线试衣间 医疗设备可视化等等 如果你第一次接触Three js 那么就跟着我们的文章一起学习就好
  • VSCode手记

    设置为中文 如何将VSCode设置成中文语言环境 vscode设置中文 z975821109的博客 CSDN博客 快捷键 跳转声明代码 F12 撤销 Ctrl Z 重做 Ctrl Y 查找 Ctrl F 删除当前行 Ctrl Shift K
  • Vue3 reactive丢失响应式问题

    问题描述 使用 reactive 定义的对象 重新赋值后失去了响应式 改变值视图不会发生变化 测试代码
  • MIPI DSI-2 协议解析

    文章目录 前言 一 DSI 2 简单介绍 1 1 DSI 层次定义 1 2 Command和Video模式 1 2 1 Command模式 1 2 2 Video 模式 1 2 3 Virtual Channel Capability 虚拟
  • 基于SSM的企业人事管理系统

    文末获取源码 一 项目摘要 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端 采用HTML和Vue相结合开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA E
  • 【Nacos在derby模式下密码忘记】使用derby的ij工具重置密码/修改密码

    问题描述 nacos部署未用mysql 直接运行 使用了默认的derby数据库 这时候不一小心修改的密码给忘记了 无法登录 当时是部署在centos上的一个演示环境 没有采用mysql数据库 如果生产上 建议使用mysql 解决方案 1 下
  • 02-zookeeper分布式锁案例

    1 Zookeeper分布式案例 1 1 Zookeeper分布式锁原理 核心思想 当客户端要获取锁 则创建节点 使用完锁 则删除该节点 当我们假设根节点 下有 locks节点时 1 客户端获取锁时 在locks节点下创建临时顺序节点 2
  • 【人工智能】手掌相关信息测量【实验报告与全部代码】(QDU)

    计算机视觉技术 课程设计 指导老师 张维忠 目录 一 实验背景 二 实验任务 三 任务分配 四 实验环境 五 实验思路 六 实验内容 1 MediaPipe Hands介绍 1 1 手部检测器 1 2 手部坐标预测模型 2 裁剪手掌部分 2
  • Shell脚本for循环小实验

    目录 1 计算1 100的和 2 提示用户输入一个小于100的整数 并计算从1到该数之间所有整数的和 3 从1到100所有整数的偶数和 奇数和 4 执行脚本输入用户名 若该用户存在 输出提示该用户已存在 若该用户不存在 提示用户输入密码 建