shell_07--read与for语句

Posted lzqitdl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell_07--read与for语句相关的知识,希望对你有一定的参考价值。

1、交互输入
   read    Python中用input()函数,进行输入;
   read命令同时可以定义多个变量值;而输入的内容默认以空格为分隔符,将值输入到对应的变量中;
   如果默认值过多,最后所有的值都会被赋予给最后一个变量;
   如果默认值过少,多余的变量则为空值;
  read如何输入:
      echo "请输入一个目录:"
       我们需要 echo -n 取消换行符号
      echo "请输入一个目录:";read 变量
      请输入一个目录:\\etc
 
    常用参数:
     -p
     read -p "请输入一个目录:" 变量
     -t  定义超时时间
     read -t 5 -p "请输入一个目录:" 变量
  脚本默认值:
                                                            输入内容
                                         |
                             -------------------------------------------
                               |                                                   |
                          输入是否正确                                    没有输入
                                      |                                                   |
                   -----------------------------                        -------------------------------
                  |                                   |                      |                                    |
             正确                     不正确,给提示     提示必须输入                给出默认值
练习
1、输入一个设备文件,输出这个设备文件的基本信息;
#!/bin/bash
# Author: lzq
# Blog: https://home.cnblogs.com/lzqitdl/
# Time: 2019-08-16 05:26:36
# Name: text.sh
# Version: v1.0
# Description: This is a Script.
    read -t 5 -p "输入一个设备文件名:" devname
        [ -z $devname ] && fdisk -l && exit 1

        if [ -b /dev/$devname ];then
                fdisk -l /dev/$devname
                exit 0
        else
                echo "$devname 不是设备文件"
                echo "Usage:‘请输入一个设备文件,如 sda‘"
        fi
~                      


2、for语句循环  while until

2、文本判断脚本

#!/bin/bash
# Author: lzq
# Blog: https://home.cnblogs.com/lzqitdl/
# Time: 2019-08-16 05:26:36
# Name: text.sh
# Version: v1.0
# Description: This is a Script.
    read -p "输入一个文件名:" name if [ -z $name ];then echo "Usage:‘输入一个文件名:/etc/fstab‘" exit 1 fi if [ ! -e $name ];then echo "提示:输入的文件不存在!!fool" exit 2 elif [ -f $name ];then echo "$name is a file" elif [ -d $name ];then echo "$name is a dir" elif [ -b $name ];then echo "$name is a block file" elif [ -L $name ];then echo "$name is a Link file" else echo "$name是其他文件类型" fi

  for语句的应用场景:
      有一个功能,这个功能需要循环执行,只是执行对象不同;【对象必须是同类数据】

  for语句格式:
    a=[‘a‘,‘b‘,‘c‘] -- 在Python程序中,我们很多情况下,需要调用相应的方法去生成列表;
 
for 变量 in 列表;do
     循环体
done
for语句实例
1、九九乘法表
#!/bin/bash
#
for i in `seq 9`;do
	for j in `seq 9`;do
		[ $j -le $i ] && echo -n -e "$i*$j=`echo $(($i*$j))`\\t" 
	done
	echo " "
done
#方法2
for in 1..3;do
   for j in (j=1;j<10;j++);do
    #echo -n -e "$i*$j=$[$i*$j]\\t"
    [$j-le $i]&&echo -n -e "$i*$j=$[$i*$j]\\t"
   done
   echo
  done

补充:

  -e : 使echo命令,能够识别 特殊字符;
      \\r   回车不换行
      \\n  换行符
      \\t   制表符 tab = 4个空格

  列表的生成方式:

   1、直接给出字符串列表
     for i in a b c d e ;do
        循环体
     done

   2、整数列表

      a start ... end // 1..1是不行的 1..9  == python range1,100
        b seq 命令引用  $(seq [start [step]] end)
             步长  python range1,100,2
             seq 20 30

 整数列表实例:写一个for循环--遍历本网络网段中所有up的电脑

#!/bin/bash
# ping遍历

declare -i sum=0

for i in $(seq 1 100);do
      	ping -c 1 -w 1 10.6.12.$i &> /dev/null
        	if [ $? -eq 0 ];then
                	let sum++
                	echo "10.6.12.$i 是通的"        
       	else
                	echo "10.6.12.$i 是不通的"
        	fi
done

echo "总共有 $sum 台电脑在线"

  3、返回列表的命令

  $(COMMAND)
    应用场景: ls /var/log/

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

#!/bin/bash
#
declare -i sum=0

for i in $(ls /var/log/);do
	if [ "*.log" = $i ];then
		echo $i
		let sum++
	fi
done
		
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中$0整行内容 --awk按行执行
  
      扩展:for语句另一种用法:
      基于C语言格式的for语句语法:
 #常规用法
for 变量 in 列表; do 循环体 done

  优点:不易进入死循环
 
#C语言用法
for((初始条件;条件判断语句;值变化语句));do 循环体 done
 case 语句 -- 做匹配
    case语句的语法格式:
case 变量 in
    PATTEN1)
       代码块1
       ;;
    PATTEN2)
      代码块2
       ;;
    *)
       代码库
    esac

while
 while语句格式
 初始值

while 条件;do
	循环体
	let i++ //变化初始值
done

  

 

    


     

 

 

 

以上是关于shell_07--read与for语句的主要内容,如果未能解决你的问题,请参考以下文章

14 shell脚本--006交互输入与for语句

for / while / until 基础循环语句案例图解 shell编程之循环语句

linux的shell脚本中if,for,while的解析与应用

1-23-shell脚本之-if流程控制语句和for循环语句的使用

[转帖]shell 循环语句for/do/done和while/do/done以及break,continue

shell编程之case分支语句,for循环语句和while循环语句