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
相关推荐
用户97183563346615 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪16 小时前
linux 拷贝文件或目录到指定的位置
linux
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
小宇宙Zz1 天前
Maven依赖冲突
java·服务器·maven
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智1 天前
ARP代理--工作原理
运维·网络·arp·arp代理