Linux中的shell脚本练习

1.判断字符串是否为空

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

2.判断文件是否存在

复制代码
#/bin/bash
if [ -f /opt/a.txt ];then
        echo "ok"
else
        echo "不存在,正在创建"
        touch /opt/a.txt
fi

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

复制代码
#!/bin/bash
if [ "$1" = "hello" ]; then
        echo "Hello! How are you ?"
elif [ "$1" = "" ]; then
				echo "You MUST input parameters"
else
				echo "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/null
        if [ $? -eq 0 ];then
                echo "alive: $src_ip.$i" >> ip_up.txt
                echo "alive: $src_ip.$i"
        else
                echo "down: $src_ip.$i" >> ip_down.txt
                echo "down: $src_ip.$i"
        fi
        } &
done
wait
echo "finish..."

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

复制代码
#!/usr/bin/env bash
case $1 in
        foo)
        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次
do
   len=${#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 ];then
        echo "$user is already exist!"
        exit 0
else
        useradd $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
do
        user=`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):" c
  if [ $c -eq $num ];then
    echo "恭喜你猜对了!"
    let a++
    let i++
  elif [ $c -gt $num ];then
    echo "你猜高了,请继续!"
    let a++
  elif [ $c -lt $num ];then
    echo "你猜低了,请继续!"
    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++ ))
do
        echo $i-----${server_ip[i]}-----${server_name[i]}
done
echo "请输入要连接的序号: " && read n 
if [[ $n -ge 0 && $n -lt ${#server_ip[@]} ]];then
        echo "正在链接${server_ip[n]}"
        sleep 1
        /root/expect/expect.sh ${server_ip[n]}
else
        echo "请输入范围内的序号..."
        sleep 1
fi

/root/expect/expect.sh

复制代码
#!/usr/bin/expect
set user root
set pass 1
set ip [ lindex $argv 0 ] 
set timeout 10

spawn ssh $user@$ip
expect {
        "yes/no" {  send "yes\r"; exp_continue }
        "password:" { send "$pass\r" };
}
interact
相关推荐
望获linux3 小时前
北京亦庄机器人马拉松:人机共跑背后的技术突破与产业启示
linux·人工智能·机器人·操作系统·开源软件·rtos·具身智能
张槊哲4 小时前
字符和编码(python)
linux·数据库·python
herinspace7 小时前
管家婆易指开单如何设置零售开单
运维·服务器·数据库·软件工程·sass·零售
小镇敲码人7 小时前
【网络层】之IP协议
服务器·网络·tcp/ip
IT阳晨。8 小时前
【嵌入式Linux】基于ARM-Linux的zero2平台的智慧楼宇管理系统项目
linux·arm开发
_清风来叙8 小时前
【Linux】Linux内核模块开发
linux·arm开发
于齐龙8 小时前
pip 常用命令及配置
linux·python·pip
闻道且行之8 小时前
Paddle Serving|部署一个自己的OCR识别服务器
服务器·ocr·paddle
让子弹飞028 小时前
24.Linux中RTC的驱动实验_csdn
linux·ubuntu·stm32mp157·驱动的分离和分层·rtc时间
Johny_Zhao8 小时前
在Ubuntu Server上安装Checkmk监控系统
linux·人工智能·网络安全·信息安全·云计算·shell·yum源·系统运维·checkmk