当前位置: 首页 > web >正文

Linux中的shell脚本练习

1.判断字符串是否为空

#!/usr/bin/bash
while : #:默认值为真
do
read -p "请输入你的密码: " a
pass=123456
if [ -z $a ];thenecho "您输入的密码不能为空"exit 1
elseif [ $a = $pass ];thenecho "登录成功"breakelseecho "您的密码输入有误,请重新输入"fi
fi
done

2.判断文件是否存在

#/bin/bash
if [ -f /opt/a.txt ];thenecho "ok"
elseecho "不存在,正在创建"touch /opt/a.txt
fi

3.必须在脚本后加上适当的参数脚本才能正确执行

#!/bin/bash
if [ "$1" = "hello" ]; thenecho "Hello! How are you ?"
elif [ "$1" = "" ]; thenecho "You MUST input parameters"
elseecho "The only accept parclear ameter is hello"
fi

4.测试ip地址主机位从2到100的机器是否存活,并把存活的机器记录到文本文件alivehost.txt内。(使用ping命令)

#!/usr/bin/bash
src_ip="192.168.246"
for i in {2..254}
do{ping -c1 $src_ip.$i &>/dev/nullif [ $? -eq 0 ];thenecho "alive: $src_ip.$i" >> ip_up.txtecho "alive: $src_ip.$i"elseecho "down: $src_ip.$i" >> ip_down.txtecho "down: $src_ip.$i"fi} &
done
wait
echo "finish..."

5.根据用户输入foo打印bar,输入bar打印foo,否则输入只能输入foo|bar

#!/usr/bin/env bash
case $1 infoo)echo "bar";;bar)echo "foo";;*)echo "Usage:$0 '{foo|bar}'";;
esac

6.随机数生成8位随机密码

#!/bin/bash
string="AFJALKGJglekrjgkASKJFEKFELjjglkerjgwej235834095ejglkdjg"
sum=''
for ((i=1; i<=8; i++))    #指定循环8次
dolen=${#string}   #获取变量的长度num=$[RANDOM % $len]    #使用变量长度中生成随机数(作为取字符的索引)value=${string:$num:1}    #截取指定索引的字符sum+=$value   #字符追加到sum变量中
done
echo $sum 

7.for循环批量创建用户

#!/usr/bin/bash
read -p "请设置用户名/数量/密码: " prefix num pass
cat <<-EOF
用户前缀:$prefix
用户数量:$num
用户密码:$pass
EOF
for i in $(seq 1 $num)
do
user=$prefix$i
id $user &> /dev/null
if [ $? -eq 0 ];thenecho "$user is already exist!"exit 0
elseuseradd $user &> /dev/null && echo $pass | passwd --stdin $user &>/dev/null
fi
done
echo "starting create users..."

8.通过一个文件批量创建用户:
#背景:写一个脚本,满足以下需求及应用,如一个文件的内容如下,根据文件内容实现批量创建用户,第一列为用户名,第二列为密码

[root@localhost script]# vim user_pass.txt #创建用户和密码文件
user1 123456
user2 654321
user3 1122334
user4 4433221
user5 9876543
[root@localhost script]# vim create_user.sh #编写脚本
#!/usr/bin/bash[ $UID -ne 0 ] && exit 1
while read line
douser=`echo $line | awk '{print $1}'`pass=`echo $line | awk '{print $2}'`id $user &> /dev/null || useradd $user && echo $pass | passwd $user --stdin
done < /opt/test/script/user_pass.txt

9.随机数实现猜数字游戏

#!/bin/bash
num=$[RANDOM % 10]
i=1 #定义i为循环条件
a=0 #定义a为猜的次数变量
while [ $i -eq 1 ]
do
read -p "请输入你猜的数字(0~10):" cif [ $c -eq $num ];thenecho "恭喜你猜对了!"let a++let i++elif [ $c -gt $num ];thenecho "你猜高了,请继续!"let a++elif [ $c -lt $num ];thenecho "你猜低了,请继续!"let a++fi
done
echo "你一共猜了${a}次。"

10.建立ssh免密连接脚本

[root@mysql-server script]# cat shuzu.sh 
#!/bin/bash
server_ip=(192.168.209.166 192.168.209.168 192.168.209.169)
server_name=(web-1 web-2 mysql-server)
for (( i=0; i<${#server_ip[@]}; i++ ))
doecho $i-----${server_ip[i]}-----${server_name[i]}
done
echo "请输入要连接的序号: " && read n 
if [[ $n -ge 0 && $n -lt ${#server_ip[@]} ]];thenecho "正在链接${server_ip[n]}"sleep 1/root/expect/expect.sh ${server_ip[n]}
elseecho "请输入范围内的序号..."sleep 1
fi

/root/expect/expect.sh

#!/usr/bin/expect
set user root
set pass 1
set ip [ lindex $argv 0 ] 
set timeout 10spawn ssh $user@$ip
expect {"yes/no" {  send "yes\r"; exp_continue }"password:" { send "$pass\r" };
}
interact
http://www.xdnf.cn/news/2727.html

相关文章:

  • 在线图书管理系统的结构化需求分析过程讲解
  • 【Git】项目多个分支开发、维护与优化处理 -- 还未实测 记录初
  • PCL实时动态加载显示点云功能以及laslib配置
  • 使用Python在excel里创建柱状图
  • 如何搭建spark yarn 模式的集群集群
  • uniapp利用生命周期函数实现后台常驻示例
  • auto(x) decay copy
  • 一键叠图工具
  • 浏览器存储
  • 服务器文件同步工具有哪些?
  • 经典数仓架构深度解析与演进:从离线处理到新型架构对比
  • 实战篇:在QEMU中编写和调试VHost/Virtio驱动
  • 从数据到决策:如何使用Python进行自动驾驶数据分析
  • 利用Python打印有符号十进制数的二进制原码、反码、补码
  • 问题 ERROR: for jobmanager ‘ContainerConfig‘ 原因及解决
  • ComfyUI 学习笔记:安装篇及模型下载
  • 2025-4-27-C++ 学习 数组(2)
  • springboot项目文件上传到服务器本机,返回访问地址
  • 高级数据库对象全面解析:视图、存储过程与触发器
  • Express.js 框架教程:从入门到精通
  • 【“星瑞” O6 评测】 — llm CPU部署对比高通骁龙CPU
  • T-BOX应用 NXP S32K148控芯片搭配 SD NAND(嵌入式SD卡)存储的完美结合
  • 设计模式(状态模式)
  • 【力扣刷题实战】丢失的数字
  • vue代码规范管理
  • BeeWorks企业内部即时通讯软件支持国产化,已在鸿蒙系统上稳定运行
  • 【Altium】自定义菜单显示名称
  • C++23 std::bind_back:一种调用包装器 (P2387R3)
  • Matlab自学笔记五十二:变量名称:检查变量名称是否存在或是否与关键字冲突
  • Nacos-3.0.0适配PostgreSQL数据库