• shell_for笔记


    1.交互输入

    read【交互式界面】

      :read a b c

       aa bb cc

      read命令同时可以定义多个变量;而输入的内容默认以空格为分隔符,将值输入到对应的变量中;如果默认值过多,最后所有的值都会被赋予给最后一个变量;如果默认值过少,多余的变量则为空值

      read如何输入:

            echo”请输入一个目录:”         //我们需要 echo -n取消换行符号

            例:echo”请输入一个目录:”;read变量

              请输入一个目录:/etc

    常用参数:

          -p   read -p ”请输入一个目录:”变量

          -t   定义超时时间 read -t 5 -p ”请输入一个目录:”变量

    脚本默认值

       输入内容-------------------------------

       |                                                    |

       输入是否正确-----                    没有输入------------

        |                 |                               |                         |

      正确      不正确,给提示      提示必须输入  给出默认值

      [ ! -n $filename ]

    练习:输入一个设备文件,输出这个设备文件的基本信息

     1 #!/bin/bash
     2 
     3 #
     4 
     5 read -t 5 -p “输入一个设备文件名:”devname
     6 
     7 [ -z $devname ]&& devname=`fdisk -l`&& exit 1
     8 
     9  
    10 
    11 if [ -b /dev/$devname ];then   #-b 是否为块文件
    12 
    13    fdisk -l /dev/$devname 
    14 
    15    exit 0
    16 
    17 else
    18 
    19    echo “$devname不是设备文件”
    20 
    21    echo “Usage:‘请输入一个设备文件,如:sda’”
    22 
    23    exit 2
    24 
    25 fi

    2.for语句循环

    case语句

       case语句的语法格式:

      case 变量 in

      patten1)

        代码块1

        ;;

      patten2)

              代码块2

              ;;

           *)

          esac

    for语句的应用场景:

       有一个功能,这个功能需要循环执行,只是执行对象不同;【对象必须是同类数据】

    for语句格式:

      a=[‘a’,’b’,’c’] –在python程序中,我们很多情况下,需要调用相应的方法去生成列表;

      for 变量 in 列表;do

        循环体

      done

    练习:99乘法表

     1 #!/bin/bash
     2 
     3 for I in`seq 9`;do
     4 
     5    for j in `seq 9`;do
     6 
     7       [$j -le $i] && echo -n -e “$i*$j=`echo $(($i*$j))`	”
     8 
     9    done
    10 
    11    echo “ ”
    12 
    13 done
     1 #!/bin/bash
     2 
     3 #九九乘法表
     4 
     5 for i in {1..9};do
     6 
     7    for j in $i;do
     8 
     9       echo -n -e“$j*$i=$[$i*$j]	”
    10 
    11    done 
    12 
    13    echo
    14 
    15 done

    echo -e

      -e 使echo命令,能够识别特殊符号

        回车不换行

        换行符

        制表符tab=4个空格

      unix2dos   à

      dos2unix

    列表生成方式:

    1. 直接给出字符串列表

      for i in a b c d e;do

         循环体

      done

    2. 整数列表

      a{start…end} //{1..1}是不行的{1..9}==python中的range

      b seq命令引用 $(seq[start[step]]end)

                步长 python range{1,100,2}

                seq 20 30

    题目:用for循环实现遍历本网络段中左右up的主机

     1 declare -I sum=0
     2 
     3 for i in $(seq 1 254);do
     4 
     5    ping -c 1 -w 1 10.6.12.$i &> /dev/null
     6 
     7    if [ $? -eq 0 ];then
     8 
     9  let sum++
    10 
    11  echo10.6.12.$i是通的”
    12 
    13         else
    14 
    15             echo10.6.12.$i是不通的”
    16 
    17          fi
    18 
    19 done
    20 
    21 echo “总共有$sum台电脑在线”

    3. 返回列表的命令

      $(COMMAND)

      应用场景:ls /var/log/

    题目:判断/var/log/的所有文件。以.log结尾的文件统计处理,并显示:

     1  #!/bin/bash
     2 
     3    #
     4 
     5    declare -i sum=0
     6 
     7    for i in $(ls /var/log/);do
     8 
     9 if[“*.log”=$i];then
    10 
    11          echo $i
    12 
    13          let sum ++
    14 
    15 fi
    16 
    17         done
    18 
    19         echo “.log结尾的文件有:$sum

    4. glob机制—文件名通配符的机制

      $(ls /var/log/)

      /var/log/*

    test命令总结:

    1.test的命令的option的 -a -o只能在命令中使用

      例如【`du -h $filename|cut -d: -f1` -lt 100k -a -x $filename】

      test `du -h $filename |cut -d: -f1` -lt 100k -a -x $filename

      注意:做字符串匹配的时候,不支持正则以及通配符

    2.test test==[[]]

      再连接两个test的命令的时候,不能使用命令内部option -o -a

      一般使用|| && == != >= <=

      例如:[[yum.log==*.log]]

    5.变量引用

      $@ $* 将参数做为for循环的列表

      $0 –和awk不一样

       bash中$0代表运行的脚本文件

       【awk按行执行】awk中$0整行内容

      需要用多个词的时候用“$@”,需要一个词的时候用“$*”

  • 相关阅读:
    [蓝桥杯][基础练习VIP]完美的代价
    [蓝桥杯][基础练习VIP]分解质因数
    [蓝桥杯][基础练习VIP]Sine之舞
    [蓝桥杯][基础练习VIP]回形取数
    ZJOI 2006 书架
    HNOI2012 永无乡
    9.23 逃跑的牛Barn Running Away
    9.20 Magical multisets
    9.18 Roads on a kingdom
    【MySQL】MySQL复制表的两种方法
  • 原文地址:https://www.cnblogs.com/TheNeverLemon/p/11359390.html
Copyright © 2020-2023  润新知