美文网首页
Linux: for 循环

Linux: for 循环

作者: LET149 | 来源:发表于2023-09-25 12:39 被阅读0次

shell中的基本循环语句之一,用法与R和Python中的用法类似,但要注意具体语法的变化

基本语法

for i in {数字序列或其他}  #其中的i可以是任意字符
do
    执行语句  #循环主题
done  #循环全部运行结束后用来终止循环
1. 示例一
(base) [zhiyong@malab Learn]$ cat tt.sh 
#! /bin/bash

for i in {1..5}
do
    echo "这个数字是:$i"
done


(base) [zhiyong@malab Learn]$ bash tt.sh 
这个数字是:1
这个数字是:2
这个数字是:3
这个数字是:4
这个数字是:5

2.示例二

(base) [zhiyong@malab Learn]$ cat tt.sh 
#! /bin/bash

for i  #这里没有给出循环的范围,此时可在脚本外部指定循环范围
do
    echo "这个数字是:$i"
done

(base) [zhiyong@malab Learn]$ bash tt.sh 11 22 33  #给出循环范围为11,22,33,算是一种参数的传入操作
这个数字是:11
这个数字是:22
这个数字是:33

3.示例三

判断一个年份是平年还是闰年并输出结果

(base) [zhiyong@malab Learn]$ cat kk.sh 
#! /bin/bash

for i in  {1..401}
do
    if [[ $[i%4] -eq 0 && $[i%100] -ne 0 || $[i%400] -eq 0 ]]
        then echo "$i年是闰年"
        echo " "
    else 
        echo "$i年是平年"
        echo " "
    fi
done

(base) [zhiyong@malab Learn]$ bash kk.sh 
1年是平年
 
2年是平年
 
3年是平年
 
4年是闰年
 
5年是平年
 
6年是平年
 
7年是平年
 
8年是闰年
 
9年是平年
 
10年是平年
 
11年是平年
 
12年是闰年

4. 示例四

for循环中的限制范围可以是一个已经存在的文件

(base) [zhiyong@malab Learn]$ cat aa
aaa
bbb
ccc
ddd

(base) [zhiyong@malab Learn]$ for i in $(cat aa)  #用aa当作限制主体,注意其中cat命令和外面$()的使用
> do 
> echo "$i"
> done

aaa
bbb
ccc
ddd

(base) [zhiyong@malab Learn]$ for i in `cat aa`  #用aa当作主体,注意其中cat命令和 ` ` 的使用
> do 
> echo $i
> done

aaa
bbb
ccc
ddd

5. C语言风格的循环语句,示例一

语法

for i in ((expr_1 ; expr-2 ; expr_3))
do
    执行语句
done
  • expr_1 , expr_2 和 expr_3都是数学表达式
  • expr_1用来初始赋值;expr_2是判断语句;expr_3是对变量的处理
  • 循环执行到不满足expr_2则会结束
(base) [zhiyong@malab Learn]$ for ((i=1;i<=5;i++))
> do
> echo "$i"
> done

1
2
3
4
5

上述示例中,i=1 是初始值;i<=5 是判断条件;i 自加一是对i的处理

6. C语言风格的循环语句,示例二

(base) [zhiyong@malab Learn]$ for ((i=1,j=1;i<=5;i++,j++))
> do
> echo "$i $j"
> done

1 1
2 2
3 3
4 4
5 5

7.示例五

(base) [zhiyong@malab Learn]$ cat tt.sh 
#! /bin/bash

for ((i=9,j=1;i>=1;i--,j=(j+1)*2))
do 
    echo "第$i天的起始香蕉量是$j"
done

(base) [zhiyong@malab Learn]$ bash tt.sh 
第9天的起始香蕉量是1
第8天的起始香蕉量是4
第7天的起始香蕉量是10
第6天的起始香蕉量是22
第5天的起始香蕉量是46
第4天的起始香蕉量是94
第3天的起始香蕉量是190
第2天的起始香蕉量是382
第1天的起始香蕉量是766

8. 示例六

(base) [zhiyong@malab Learn]$ cat tt.sh 
#! /bin/bash

j=1
for i in {1..8}
do 
    j=$[(j+1)*2]
done
echo "初始香蕉量为$j" 

(base) [zhiyong@malab Learn]$ bash tt.sh 
初始香蕉量为766

9. 示例七

#! /bin/bash

for i in {1..10}
do
        for k in $(seq 1 $[ 11-$i ])
    do
        echo -n " "
    done

    for j in $(seq 1 $i)
    do
                echo -ne "\033[102m \033[0m"
        done
    
    for h in $(seq 1 $i)
    do
        echo -ne "\033[102m \033[0m"
    done
    
    for p in $(seq 1 $[ 10-$i ])
        do
                echo -n " "
        done    

        echo
done


for i in {10..1}
do
        for k in $(seq 1 $[ 11-$i ])
        do
                echo -n " "
        done

        for j in $(seq 1 $i)
        do
                echo -ne "\033[102m \033[0m"
        done

        for h in $(seq 1 $i)
        do
                echo -ne "\033[102m \033[0m"
        done

        for p in $(seq 1 $[ 10-$i ])
        do
                echo -n " "
        done

        echo
done
打印形状.png

10.示例十

(base) [zhiyong@malab Learn]$ cat tt_2.sh 
#! /bin/bash 

for i in {1..8}
do
    if [ $[$i%2] -eq 0 ]
    then    
        for j in {1..8}
        do
            if [ $[$j%2] -eq 0 ]
            then echo -n -e "\033[47m  \e[0m"

            else echo -n -e "\033[46m  \e[0m"
            fi
        done
    echo 
    else 
        for j in {1..8}
        do
                    if [ $[$j%2] -eq 0 ]
                    then echo -n -e "\033[46m  \e[0m"

            else echo -n -e "\033[47m  \e[0m"
                    fi
        done
    echo
        fi

done
打印国际象棋棋盘.png

11.示例十一

(base) [zhiyong@malab Learn]$ cat tt_3.sh 
#! /bin/bash

for i in {1..9}
do
    for j in $(seq 1 $i)
    do
        if [ $i -gt 2 ] && [ $i -lt 5 ] && [ $j -eq 2 ]
        then    echo -n -e "\033[47m\033[33m$i*$j=$[$i*$j]\033[0m    "
        else    echo -n -e "\033[47m\033[33m$i*$j=$[$i*$j]\033[0m   "
        fi
    done
    echo
done
打印九九乘法表.png

12. 示例十二

forawk联用

for i in $(seq -s' ' 0 11)
  do  '#注意缩进
  cat seurat_found_marker_all.txt|awk '{print $2"\t"$(NF-1)"\t"$NF}'|sed '1d'|awk '{if($2=='$i') print $0}' > "seurat_found_marker_cluster_"$i".txt"  #注意缩进
done

awk中调用外部变量时,注意使用'$i'的形式,要特别注意外部单引号的使用

相关文章

  • linux for循环

    for var in item1 item2 ... itemN do command1 command2...

  • Linux Shell:Shell循环语句

    摘要:Linux,Shell Shell中常用循环有for,while Shell循环语法结构 (1)for循环语...

  • Linux结构化语句-条件与循环

    Linux结构化语句 条件语句 if循环语句: for 循环和 while循环 条件语句 if if 条件语句的常...

  • Go语言之旅:for语句

    Go 只有一种循环结构—— for 循环。 原文地址:https://learn-linux.readthedoc...

  • shell

    1.双重循环 2.循环脚本 3.循环脚本 代码内容 文件内容 4.Linux shell中2>&1的含义解释 (全...

  • 33_双向循环链表的实现

    关键词:双向循环链表 0. 课程目标 使用Linux内核链表实现双向循环链表 template < typenam...

  • linux系统shell循环

    拷贝grub文件到其他节点机,执行跟新grub 1.创建shell脚本bat.sh内容如下: #!/bin/bas...

  • Linux Shell——迭代循环

    学习是自己的事情。 scripts are for lazy people. 循环语句是任何一门语言都不能缺失的部...

  • linux bash until循环

    until循环执行一系列命令直至条件为真时停止。 until循环与while循环在处理方式上刚好相反。 一般whi...

  • 使用Linux crontab命令自动重启服务

    循环运行的计划任务,Linux系统则是由cron/crond这个系统服务来控制的。Linux系统上面原本就有非常多...

网友评论

      本文标题:Linux: for 循环

      本文链接:https://www.haomeiwen.com/subject/inmdnktx.html