Linux shell for循环

bash shell提供了for命令,允许你创建一个遍历一系列值的循环。每次迭代都使用其中一个值来执行已定义好的一组命令。

格式:

for var in list
do 
   commands 
done

例子:

#!/bin/bash

for test in 北京 上海 深圳 成都 武汉 郑州 
do
  echo The next state is $test

done

#!/bin/bash

for test in 北京 上海 深圳 成都 武汉 郑州 
do
  echo The next state is $test

done


echo last time we visited was $test

#!/bin/bash

for test in  I don't know if this'll work 
do
  echo "word:$test"

done

#!/bin/bash

for test in  I don\'t know if this\'ll work 
do
  echo "word:$test"

done

#!/bin/bash

for test in  I "don't" know if "this'll" work 
do
  echo "word:$test"

done

#!/bin/bash

for test in  Nevada New Hampshire New Mexico New York 
do
  echo "word:$test"

done

for 命令用空格来划分列表中的每个值。

#!/bin/bash

for test in  Nevada "New Hampshire" "New Mexico" "New York" 
do
  echo "word:$test"

done

#!/bin/bash

list='Nevada "New Hampshire" "New Mexico" "New York"'

for test in  $list
do
  echo "word:$test"
done

#!/bin/bash

file_name=$HOME/number

for num in $(cat $file_name)
do
  echo $num
done

#!/bin/bash

file_name=$HOME/line

for item in $(cat $file_name)
do
  echo $item
done

可以从输出看到行中有空格,输出就会换行。是因为IFS的原因。

特殊环境变量IFS:内部字段分隔符,默认将空格,制表符,换行符当作字段分隔符

#!/bin/bash

file_name=$HOME/line

IFS_OLD=$IFS
IFS=$'\n'

for item in $(cat $file_name)
do
  echo $item
done

IFS=$IFS_OLD

#!/bin/bash

file_name=$HOME/line

IFS_OLD=$IFS
IFS=$'\n':;

for item in $(cat $file_name)
do
  echo $item
done

IFS=$'\n':;会将换行,冒号和分号当作分隔符。

#!/bin/bash

file_name=$HOME/*

for item in $file_name
do
  if [ -d "$item" ]; then
    echo $item is a directory
  elif [ -f "$item" ]; then
    echo $item is a file
  fi
  
done

在Linux中,目录名和文件名中包含空格当然是合法的。要适应这种情况,应该将$item变量用双引号圈起来。如果不这么做,遇到含有空格的目录名或文件名时就会有错误产生。

#!/bin/bash

file_name="$HOME/sentinel $HOME/post*"

for item in $file_name
do
  if [ -d "$item" ]; then
    echo $item is a directory
  elif [ -f "$item" ]; then
    echo $item is a file
  fi
  
done

C语言的for:

#!/bin/bash

for((i=0;i<10;i++ ))
do
    echo $i
done

#!/bin/bash

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

posted @ 2022-09-12 16:29  shigp1  阅读(3018)  评论(0编辑  收藏  举报