shell----语句(if else while case)

本文详细介绍了Shell脚本的基础知识,包括if单分支、双分支判断,for循环、while循环及嵌套循环的使用,展示了如何通过脚本进行用户状态检测、定时任务设置等实用操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

########################  1. if 单分支  #########################
 

1):统计登陆SHELL为bash 的用户;先定义变量I

awk -F: 'BEGIN{i=0}{if($7~/bash$/){i++}}END{print i}' /etc/passwd


2):统计UID 小于500的 uid   在/etc/passwd 中
 

[root@foundation17 Desktop]# awk -F: 'BEGIN{i=0}{if($3<=500)(i++)}END{print i}' /etc/passwd
31

###################    2.if 双分支   #############################

1)统计uid小于等于500和大于500的个数

 

awk -F: 'BEGIN{i=0;j=0}{if($3<=500){i++}else{j++}}END{print i,j}' /etc/passwd


###################  3. for 循环   #########################
格式:
             for 条件
             do
                        动作
            done

 

1):让变量依次取1 2 3
方法一:

for NUM  in 1 2 3------让变量依次取1 2 3
do
   echo $NUM
done

方法二:

for NUM  in `seq 1 2 3`
do
   echo $NUM
done


2):检测当前网络环境中所有主机的状态

 

#/bin/bash

for NUM in `seq 100`

do

ping 172.25.254.$NUM $>/dev/null  &&  echo 172.25.254.$NUM is up || echo 172.25.254.$NUM is down

done

3):打印1-5
seq 5   生成序列1-5

 

awk 'BEGIN{for(i=1;i<=5;i++){print i}}'

 

练习1:
检测活跃的主机号码()三种表达方法

1)

#!/bin/bash
for NUM  in `seq 100`
do
ping -c1 -w1 172.25.254.$NUM &>/dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.$NUM is down
done


2)

#!/bin/bash
for ((a=1;a<100;a++))
do
ping -c1 -w1 172.25.254.$NUM &>/dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.$NUM is down
done


3)

#!/bin/bash
for a in {1..100}
do
ping -c1 -w1 172.25.254.$NUM &>/dev/null && echo 172.25.254.$NUM is up || echo 172.25.254.$NUM is down
done


练习2:


倒计时:10秒关机
 

#!/bin/bash
for ((a=10;a>0;a--))
do
   echo -n " TIME $a "
   echo -ne "\r"   #-e为添加解析
   sleep 1
done

2)倒计时
分钟+秒

#!/bin/bash

read -p "please input minute: " a
read -p "please input seconds:" b

let i=a*60+b

for ((;i>0;i--))
do
    let a=i/60
    let b=i%60
    echo -n " $a:$b "
    echo -ne "\r"
    sleep 1
done

 

##################  4.while 循环 ###################

怎么查看系统开启了多长时间 uptime


 

#!/bin/bash
while true
do
  uptime
  sleep 2
done


练习:

非交互式修改密码

echo "123456" | passwd --stin student


创建westos 1-20 密码都是 123456

PREFIX="westos"
i=1
while [ $i -le 20 ]
do
    useradd ${ PREFIX}$i
    echo "123456" | passwd --stdin ${ PREFIX} $i &> /dev/null
   ((i++))
done


批量删除:
 

#!/bin/bash
PREFIX="westos"
i=1
while [ $i -le 20 ]
do
    userdel -r  ${PREFIX}$i &> /dev/null
    echo "123456" | passwd --stdin ${PREFIX}$i &> /dev/null
    ((i++))
done


####################      5.  嵌套循环     #######################

#!/bin/bash

for ((a=1;a<=3;a++))
do
    echo "starting outside loop:$a"
    for ((b=1;b<=3;b++))
      do
          echo “Iside loop: $b”
      done
done

 

练习:
打印9*9乘法表

#!/bin/bash
  2 for ((a=1;a<=9;a++))
  3 do
  4    for ((b=1;b<=a;b++))
  5 do
  6    ((t=$a*$b))
  7    echo  -ne " $a*$b=$t\t\c "   一个制表位8个空格
  8    done
  9    echo  
 10 done


                  
方法二:

#!/bin/bash

for i in $( seq 9)
do
  for j in $(seq $i)
   do
      echo -ne "$i*$j=$(($i*$j))\t"
   done
  echo -e "\n"
done


#######################     6. if 语句      #################

脚本:
如果用户是kiosk,输出Hello kiosk

#!/bin/bash
user=kiosk
if grep $user /etc/passwd;then
    echo "Hello $user"
fi

if date;then
    echo "Hello date"
fi

#####################  7.  if-else   语句 ###################
格式:

if 条件; then
   动作1
elif
  动作3
elif
  动作4

else
   动作2
fi


脚本:
如果用户是student,输出welcome student
如果用户是westos,输出welcome  westos
如果用户是kiosk,输出welcome kiosk
如果用户是linux,输出welcome linux
否则输出你不被允许

#!/bin/bash

if [ "$1" -eq "student" ];then
    echo "Welcome $1"
elif [ "$1" -eq "westos" ];then
    echo "Welcome $1"
elif [ "$1" -eq "kiosk" ];then
    echo "Welcome $1"
elif [ "$1" -eq "linux" ];then
    echo "Welcome $1"
else
    echo "You are not allowed!"
fi

##################     8.case 语句    #############################


用户分析
脚本:
如果用户是student,kiosk,linux,westos中的任一一个,输出 welcome ,用户
否则输出sorry

 

#!/bin/bash
case $1 in
student|kiosk|linux|westos)
     echo "Welcome,$1"
     ;;
*)
     echo "Sorry!"
     ;;
esac

脚本:

输入a为红色,b 为绿色,c为黄色,d为蓝色

用户输入A 显示主机IP
              B   显示磁盘剩余空间、
              C    显示运行时间
              Q    退出系统

#!/bin/bash
   while true
   do
    echo -e "
   \033[31m A 显示主机IP \033[0m
   \033[32m B 显示磁盘剩余空间 \033[0m
   \033[33m C 显示系统运行世界 \033[0m
   \033[34m Q 退出系统 \033[0m
   "
  read -p "please input character:" char
  case $char in
  a|A)
  ifconfig br0 | grep "inet " | awk '{print $2}'
 ;;
  
  b|B)
  df -h | awk 'NR==2{print "剩余空间为:"$4}'
  ;;
  
  c|C)
  uptime | awk '{print $3}' | awk -F, '{print $1}'| awk -F: '{printf" 系统已经运行了"$1"小时"$2"分>    钟"}'
  
  ;;
 
  q|Q)
  exit 0
  ;;
  esac
  done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值