shell 循环语句与判断语句函数

    科技2024-12-12  26

    if 语句 if then elif fi if then else fi

    #!/bin/bash read -p "请输入两个数" n1 n2 expr $n1 + $n2 + 1 n3=0 if [[ $? == 0 ]] then echo "input ok" expr n3=$(($n1+$n2)) else echo "input error" fi if [ $n1 -gt $n2 ] #if test $n1 -gt $n2 then echo "第一个数大" else echo "第二个数大" fi echo $n3

    for 循环

    read -p "please in put a num" num sum=0 for((i=1;i<=$num;i+=1)) do sum=$(($sum+$i)) done echo $sum sum1=0 for i in `seq 1 100` do sum1=$(($i+$sum1)) done echo $sum1 批量創建用戶 for n in `seq 10` do useradd olddog$n pass=openssl rand -base64 10 echo -e "olddog$n:\t $pass" >>/etc/passwd.txt echo $pass|passwd --stdin done for n in `seq 11 15` do id olddog$n if [ $? -ne 0 ] then useradd olddog$n pass=openssl rand -base64 10 echo -e "olddog$n:\t $pass" >>/etc/Passwd.txt fi done chapasswd<Passwd.txt 批量查詢ip段是否通10.0.0.0/24 for n in {1..254} do if `ping -c 2 -w 3 10.0.0.$n &>>/dev/null` then echo "10.0.0.$n is up" else echo "10.0.0.$n is down" fi done

    case语句

    read -p "请输入选项" l case $l in 1) echo 1 ;; 2) echo 2 ;; *) echo "hha" ;; esac

    while 循环

    read -p "请输入一个数字" line while [ $line -gt 0 ] do line=$(($line-1)) echo $line done

    awk 数组

    #!/bin/bash awk '{S[$1]++}END{for(key in S) print key,S[key]}' < 1.log [root@localhost logs]# sh 3.sh 192.168.1.10 5 192.168.1.11 1 [root@localhost logs]# cat 1.log 192.168.1.10 192.168.1.10 192.168.1.10 192.168.1.10 192.168.1.10 192.168.1.11 ${olddog}${#olddog}${olddog:offset:length}、${olddog#word}、${olddog##word}、${olddog%word}、${olddog%%word}、${olddog/pattern/string}、${olddog//pattern/string}、${olddog:-word} ${olddog} 取值 ${#olddog} 求长度 ${olddog:offset:length} 取length+1之后的字符串 ${olddog#word} 从头开始删除第一个worl ${olddog##word}从头开始删除所有word ${olddog%word}从末尾删除第一个world ${olddog%%word} 从末尾开始删除所有word ${olddog/pattern/string} 替换匹配的字符串 ${olddog:-word} olddog为空时word赋值给最左边接收的变量 随机密码 l长度 s 特殊字符 C 大写字符 c小写字符 -d 数字 mkpasswd -l 10 -d 6 -c 6 -C 3 -s 2 openssl rand -base64 10 date +%s%N 截取10个数字 cut -c 1-10 [root@localhost logs]# date +%s%N|cut -c 1-10 1602077263

    sort排序 r反向排序 n对数字排序 [root@localhost logs]# cat 1.txt|sort -rn 34 23 3 1 [root@localhost logs]# cat 1.txt|sort -n 1 3 23 34

    函数:

    function name { echo "hahah" } name

    创建随机数字替换为字母的10个文件

    path=/olddog [ -d $path ] || mkdir $path for n in {1..10} do random=`echo "OLDDOG$RANDOM"|md5sum|tr "0-9" "m-z"|cut -c 2-11` touch $path/${random}_olddog.html done 文件批量改名file=aasdqwe_olddog.html echo ${file/olddog.html/oldmaledog.HTML/} for file in `ls /olddog/*.html` do mv file `echo ${file/olddog.html/oldmaledog.HTML/}` done ls /oldboy/*.HTML|awk -F "oldgirl.HTML" '{print "mv",$0,$1"olddog.html"}'|bash

    检测网络是否正常

    . /etc/init.d/functions URL=( https://www.baidu.com https://luffycity.com ) CheckUrl(){ wget --spider -t 2 -T 5 -o /dev/null -q $1 if [ $? -eq 0 ] then echo "is ok" fi } DearUrl(){ for url in ${URL[*]} do CheckUrl $url done } main(){ while true do DearUrl sleep2 done } awk '{$S[$1]++}END{for (key in S) print S[key],key}' access.log|sort -rn>/tmp/ip.log while read line do ip=`echo $line|awk '{print $2}'` count=`echo $line|awk '{print $1}'` if [ $count -gt 35 -a `grep "$ip" /tmp/drop.log|wc -l` -lt 1] then iptables -IINPUT -s $ip -j DROP &&\ echo "$ip" >>/tmp/drop.log else echo "$ip">>/tmp/accept.log done</tmp/1.log
    Processed: 0.011, SQL: 8