第三章、shell循环语句

shell循环语句小结

for

for ... in ... do ... done

for var in var1 var2 ... varn
do
    sentence1
    sentence2
    ...
done

示例1,输出a 2 cc,每个元素一行:

for i in a 2 cc; do echo $i; done

示例2,输出当前路径下的所有文件名,每个文件名一行:

for filename in `ls`; do echo "${filename}"; done

示例3,输出5-10

$(seq 5 10)

$(seq start interval end) 并且包含 end

for i in $(seq 5 10); do echo "${i}"; done

示例4,使用{1..10} 或者 {a..z}

for i in {1..10}; do echo $i; done
for i in {b..m}; do echo $i; done

for((...;...;...)) do ... done

for((expression;condition;expression))
do
    sentence1
    sentence2
    ...
done

示例,输出4 - 15,其中 % 3 == 0 要乘以 10 否则 + 8

for((i=4;i<=4;i++))
do
    echo ${i}
    if [ `expr ${i} % 3` -eq 0 ]
    then
        echo `expr $i \* 10`
    else
        echo `expr $i + 8`
    fi
done

while

条件为假的时候,结束循环

while condition
do
    sentence1
    sentence2
    ...
done

示例,文件结束符为Ctrl+d,输入文件结束符后read指令返回false。

while read name
do
    echo "${name}"
done

until

条件为真的时候,结束循环
until condition
do
    sentence1
    sentence2
    ...
done

示例,当用户输入yes或者YES时结束,否则一直等待读入。

until [ "${word}" == "YES" ] || [ "${word}" == "yes" ] 
do
    read -p "Please input yes/YES to stop this program: " word
done

break & continue

break

break可以用于跳出当前循环,不过和 c/c++不同,breakcase 语句无效

#! /bin/bash

while read name
do
    for((i=1;i<=10;i+=1))
    do  
        echo -e "$i \c"
    done
    echo ""
    
    case "${name}" in  
        '123')
            continue;;
        'xyg')
            break;;
        *)
            echo 'good day';;    # 必须加上 ;;
        *)
            echo '12312'        # 最后一个可以不加 ;;
    esac
done

计算第一个 i ^ 4 % 7 = 4

for((i=1;1==1;i+=1))
do
    fact=1
    for((j=1;j<=4;j+=1))  
    do    
        fact=`expr ${fact} \* ${i}`
    done
    if [ `expr ${fact} % 7` -eq 4 ]
    then
        break    
    fi
done
echo $i

说实话,这个1有点猝不及防,因为bash中True为0

for((i=1;1;i+=1))
do
    if [ $i -eq 10 ]
    then
        break
    fi
done
echo $i

continue

#! /bin/bash

    for ((i=1;i<=10;i++))
    do
        if [ `expr ${i} % 2` -eq 0 ]
        then
            echo $i
        else
            continue
        fi
    done

杀死进程

如果可以打开该程序,则输入Ctrl+c即可。

否则可以直接关闭进程:

使用top命令找到进程的PID
输入kill -9 PID即可关掉此进程。
shift + m是按照占用的内存排序
找不看,基本看的是 cpu 占用率。

参考文献

强烈推荐 Y总的基础课
linux教程-孟庆昌

posted @ 2022-07-09 19:07  lucky_light  阅读(86)  评论(0编辑  收藏  举报