shell调用其他脚本变量
㈠ Linux的shell脚本for循环怎么调用位置变量
1、利用$@, $#, $*参数或shift移位参数进行循环
2、例1
#!/bin/sh
while [ $# -gt 0 ]; do
echo $1
shift;
done
3、例2
#!/bin/sh
until (($#==0)); do
echo $1
shift;
done
4、例3
#!/bin/sh
for x in $*;do
echo $x
done
5、例4
#!/bin/sh
for x in $@;do
echo $x
done
㈡ shell调用其他脚本函数
使用位置参数:
b.sh里面这样写
#!/bin/bash
basha.sh10020
a.sh里这样写
#!/bin/bash
number=$1
number_1=$2
functionfun1(){
echo$1
}
functionfun2(){
echo$1
}
fun1$number
指出几点问题:
你的原脚本里为什么fun_get=fun1
这样做没什么意义;
fun2并没有用到。
㈢ shell 如何启动另外一个脚本执行,并传递参数
子shell变量传递给父shell,中间可以保存个临时文件让父shell去读。
下边是一个子shell,传递给父shell的一个例子,仅做参考
#!/bin/bash
(
subvar="hello shell"
echo "$subvar" > temp.txt
)
read pvar < temp.txt
echo $pvar
㈣ shell脚本中调用脚本
里面有个错误,time 是个命令,不能用来做变量,这是致命的!
----------------
我给个测试脚本你试一下:
.............
#!/bin/sh
flag=0
plan_hour=19
plan_minutes=47
plan_time=`echo -n "$plan_hour";echo -n "$plan_minutes"`
clear
while true
do
hour=`date +"%H"`
minutes=`date +"%M"`
seconds=`date +"%S"`
time1=`echo -n "$hour";echo -n "$minutes"`
clear
echo -n "现在的时间为: "
echo -n $hour
echo -n :
echo -n $minutes
echo -n :
echo -n $seconds
if [ "$time1" -eq "$plan_time" ]; then
flag=1
clear
echo -n "3秒后关闭 1.sh"
sleep 3
ps -ef|grep "sh 1.sh"|grep -v grep|awk '{print $2}'|xargs kill
clear
echo "1.sh 已经结束;2.sh 1分钟后唤醒 1.sh"
sleep 59
fi
sleep 1
if [ $flag -eq 1 ]; then
sh 1.sh
exit 0
fi
done
===============
脚本一开始预定关闭 1.sh 的时间。
在未到定时时,就显式时间。
定时时间到,给出杀死 1.sh 的提示,3秒后杀死,然后再 1 分钟后再唤醒 1.sh 进程。唤醒 1.sh 后,2.sh 也就跟着退出了。
------------------------------------------------------
2.sh 时间设对了是可以杀死 1.sh 的。
如果按照你的要求,我觉得写个程序应该更好处理些,参考代码如下:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
int main()
{
pid_t pid;
while(1) {
pid = fork();
switch(pid) {
case -1:
perror("fork failed");
exit(1);
case 0:
while(1) {
printf("I'm 1.sh ,I'm running........\n");
sleep(1);
}
default:
sleep(5);
kill(pid, SIGKILL);
printf("child over\n");
sleep(40);
break;
}
}
return 0;
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
上面程序,先 fork() 出一个子进程,相当于 1.sh,然后你在子进程里做你要做的事情。父进程在 5s 后(相当于每天预设的一个时间,每天的时间设定可用相关的函数进行设置检测)杀死子进程,然后睡眠 40s,醒来后,又循环 fork() 同样的子进程做同样的事情。
㈤ hell 如何在bash脚本中连接两个字符串变量
bash在一个脚本里引用另一个脚本定义的变量有3种方法:
fork(/directory/script.sh)
fork是最普通的,就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.
运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候,parent-shell还在。
sub-shell执行完毕后返回parent-shell.sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell
exec(exec/directory/script.sh)
exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本.被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后,父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别
source(source/directory/script.sh)
与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行.所以被调用的脚本中声明的变量和环境变量,都可以在主脚本中得到和使用.
可以通过下面这两个脚本来体会三种调用方式的不同:
1.sh
#!/bin/bash
A=B
echo"PIDfor1.shbeforeexec/source/fork:$$"
exportA
echo"1.sh:$Ais$A"
case$1in
exec)
echo"usingexec…"
exec./2.sh;;
source)
echo"usingsource…"
../2.sh;;
*)
echo"usingforkbydefault…"
./2.sh;;
esac
echo"PIDfor1.shafterexec/source/fork:$$"
echo"1.sh:$Ais$A"
2.sh
#!/bin/bash
echo"PIDfor2.sh:$$"
echo"2.shget$A=$Afrom1.sh"
A=C
exportA
echo"2.sh:$Ais$A"
执行情况:
$./1.sh
PIDfor1.shbeforeexec/source/fork:5845364
1.sh:$AisB
usingforkbydefault…
PIDfor2.sh:5242940
2.shget$A=Bfrom1.sh
2.sh:$AisC
PIDfor1.shafterexec/source/fork:5845364
1.sh:$AisB
$./1.shexec
PIDfor1.shbeforeexec/source/fork:5562668
1.sh:$AisB
usingexec…
PIDfor2.sh:5562668
2.shget$A=Bfrom1.sh
2.sh:$AisC
$./1.shsource
PIDfor1.shbeforeexec/source/fork:5156894
1.sh:$AisB
usingsource…
PIDfor2.sh:5156894
2.shget$A=Bfrom1.sh
2.sh:$AisC
PIDfor1.shafterexec/source/fork:5156894
1.sh:$AisC
$
㈥ 如何在shell脚本里调用另一个shell脚本
子shell变量传递给父shell,中间可以保存个临时文件让父shell去读。下边是一个子shell,传递给父shell的一个例子,仅做参考#!/bin/bash(subvar="helloshell"echo"$subvar">temp.txt)readpvar