julywhj的gravatar头像
julywhj2017-07-27 17:37:30
shell for循环、循环变量值付给其他shell脚本

本文主要将在shell中如何编写for循环,并将循环变量作为下个shell脚本的参数。 
shell for 循环:

#!第一种写法 类似C、Java
for ((i=1; i<=100; i ++))
do
    echo $i   
done
#!第二种写法 in应用
for i in {1..100}  
do  
    echo $i  
done 
#!第三种写法 seq 使用
for i in `seq 1 100`  
do  
    echo $i  
done  

将循环变量赋值到下一个脚本: 
在运行shell脚本时候,有三种方式来调用外部的脚本,exec(exec script.sh)、source(source script.sh)、fork(./script.sh) 
1、exec(exec /home/script.sh): 
使用exec来调用脚本,被执行的脚本会继承当前shell的环境变量。但事实上exec产生了新的进程,他会把主shell的进程资源占用并替换脚本内容,继承了原主shell的PID号,即原主shell剩下的内容不会执行。

2、source(source /home/script.sh) 
使用source或者“.”来调用外部脚本,不会产生新的进程,继承当前shell环境变量,而且被调用的脚本运行结束后,它拥有的环境变量和声明变量会被当前shell保留,类似将调用脚本的内容复制过来直接执行。执行完毕后原主shell继续运行。

3、fork(/home/script.sh) 
直接运行脚本,会以当前shell为父进程,产生新的进程,并且继承主脚本的环境变量和声明变量。执行完毕后,主脚本不会保留其环境变量和声明变量。

#!main.sh主体
#!/bin/sh
a=main

echo "a is $a"
echo "PID for parent before 2.sh:$$"
case $1 in
  exec)
    echo "using exec"
    exec ./2.sh ;;
  *)
    echo "using sourcing"
    source ./2.sh ;;
esac

echo "PID FOR parent after 2.sh :$$"

echo "now m"
#!2.sh
#!/bin/sh
echo "PID FOR 2.SH:$$"

echo  "2.sh get a from main.sh is $a"

a=2.sh
export a
b=3.sh

echo "now 2.sh a is $a"

执行结果:

a is main
PID for parent before 2.sh:1162
using sourcing
PID FOR 2.SH:1162
2.sh get a from main.sh is main
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1162
now m

通过for循环,循环变量作为2.sh变量赋值并执行。

#!main主函数
#!/bin/sh
a=0
for ((i=1; i<=10; i ++))
do
        a=$i
        echo "a is $a"
        echo "PID for parent before 2.sh:$$" 
                echo "using sourcing"
                source ./2.sh
         echo "PID FOR parent after 2.sh :$$"
        echo "now a is $a"  
done

输出结果:

a is 1
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 1
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 2
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 2
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 3
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 3
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 4
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 4
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 5
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 5
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 6
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 6
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 7
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 7
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 8
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 8
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 9
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 9
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh
a is 10
PID for parent before 2.sh:1339
using sourcing
PID FOR 2.SH:1339
2.sh get a from main.sh is 10
now 2.sh a is 2.sh
PID FOR parent after 2.sh :1339
now a is 2.sh

 


打赏

分享到:

最近浏览
zuiDMxin10月12日
暂无贡献等级
sunlei1989069月22日
最代码贡献等级说明
2037785139月13日
暂无贡献等级
junwuxie9月6日
最代码贡献等级说明
julywhj8月31日
暂无贡献等级
136930880898月9日
最代码贡献等级说明
huoyong8月7日
最代码贡献等级说明
最代码官方 LV48月1日
最代码贡献等级说明
tanghao958月1日
最代码贡献等级说明
yincao8月1日
暂无贡献等级
yjx45100137月31日
最代码贡献等级说明
fellowfun7月30日
最代码贡献等级说明
Watson7月28日
最代码贡献等级说明
暂无贡献等级
随心Fly7月27日
最代码贡献等级说明
最代码广告位
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友