shellNote--day6

shellNote

day6

  • for命令

    for var in list
    do
    	commands
    done
    

    list参数中,需要提供一系列值;

    每次迭代,var会包含list中的当前值,第一次迭代会使用第一个值,第二次会使用第二个值,以此类推,知道所有的值都过一遍;

    eg:

    $ cat test1
    #!/bin/bash
    # basic for command
    for test in Alabama Alaska Arizona Arkansas California Colorado
    do
    echo The next state is $test
    done
    $ ./test1
    The next state is Alabama
    The next state is Alaska
    The next state is Arizona
    The next state is Arkansas
    The next state is California
    The next state is Colorado
    $
    

    注意:

    list中有单引号,需要特别处理,使用转义单引号或使用双引号来定义单引号的值;

    list中默认以空格来分割,如果有空格,需要使用双引号来定义含空格的值;

    可以从变量中读取值:

    list="Alabama Alaska Arizona Arkansas Colorado"
    for state in $list
    do
    echo "Have you ever visited $state?"
    done
    

    可以从文件中读取值:

    file="states"
    for state in $(cat $file)
    do
    echo "Visit beautiful $state"
    done
    
    • 更改字段分隔符

      环境变量IFS,叫做内部字段分隔符;

      默认情况下,空格,制表符,换行符,作为字段分隔符;

      临时修改IFS变量后,记得还原默认值:

      IFS.OLD=$IFS
      IFS=$'\n'
      <在代码中使用新的IFS值>
      IFS=$IFS.OLD
      

      也可以指定多个字段分隔符eg: IFS=$'\n':;"

    • 用通配符读取目录

      for file in /home/rich/test/*
      do
      if [ -d "$file" ]
      then
      echo "$file is a directory"
      elif [ -f "$file" ]
      then
      echo "$file is a file"
      fi
      done
      
  • c语言风格for命令

    for (( variable assignment ; condition ; iteration process ))

    相比shell的标准for命令:

    变量赋值可以有空格;

    条件中的变量不以美元符开头;

    迭代过程的算式未用expr命令格式;

    for (( a=1, b=10; a <= 10; a++, b-- ))
    do
    echo "$a - $b"
    done
    
  • while命令

    while test command
    do 
    	other commands
    done
    

    测试命令返回退出状态码为0,就循环执行一遍do-done之间的命令;

    返回非0状态码时,就会停止循环;

    可以使用多个测试命令,但只判断最后一个测试命令的退出状态码,来决定是否结束循环;

  • until命令

    until test commands
    do
    	other commands
    done
    

    测试命令返回退出状态码为0,就会停止循环;

    返回非0状态码时,就会循环执行一遍do-done之间的命令;

    同样可以使用多个测试命令,但只判断最后一个测试命令的退出状态码,来决定是否结束循环;

  • 控制循环

    • break命令

      break命令可以退出循环;

      break n命令,n可以指定跳出循环的层级;

    • continue命令

      continue命令可以提前中止本次循环,但不会终止整个循环;

      continue n命令,n可以指定要继续的循环层级;

  • 处理循环的输出

    可以通过done命令之后添加管道或重定向;

    eg:

    for (( a = 1; a < 10; a++ ))
    do
    echo "The number is $a"
    done > test23.txt
    
    for state in "North Dakota" Connecticut Illinois Alabama Tennessee
    do
    echo "$state is the next place to go"
    done | sort
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值