shell腳本調用其他腳本
㈠ 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() 同樣的子進程做同樣的事情。
㈡ 如何在shell腳本里調用另一個shell腳本
子shell變數傳遞給父shell,中間可以保存個臨時文件讓父shell去讀。下邊是一個子shell,傳遞給父shell的一個例子,僅做參考#!/bin/bash(subvar="helloshell"echo"$subvar">temp.txt)readpvar
㈢ shell腳本中如何跨腳本調用其他腳本中的函數
這個前提是在你腳本運行過程中,其他腳本也需要運行並調用,然後可以把函數放到環境變數中,再從腳本中讀取環境變數
㈣ shell腳本調用外部腳本的問題
估計是因為腳本1中使用了cd命令改變了當前路徑,腳本2中繼承了腳本1中的當前路徑;而一旦腳本1結束回到主shell,這個當前路徑也就不復存在。
如果在腳本2基於這個當前路徑啟動jar包前,腳本1結束了,那麼當前路徑肯定回到了主shell的設置去了,jar包就啟動不了了。
任何外部調用的shell命令執行都會產生一個進程,都會有一個pid,即使最終執行是返回錯誤。
所以,兩點建議:
1)腳本1調用2的命令行後加上 &,置入後台運行,這樣就不會因為腳本1的結束而影響腳本2的運行。
2)腳本中盡量不要用cd命令跳轉目錄,盡量使用絕對路徑。
㈤ shell腳本怎麼調用另外腳本中的參數
另外的腳本中輸出用echo,腳本調用a=`bash scriptA.sh`
㈥ 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的結果
可以將通用腳本獲取的結果直接輸出,比如你的通用腳本在/path/to/getDate.sh
內容比如如下:
echo
"2013-02-26"
然後在另外一個腳本里可以這樣獲得它的輸出
Date=`sh
/path/to/getDate.sh`
#
注意這里不是
引號
,而是反引號就是Esc下面1左邊的鍵
現在Date變數的值就是"2013-02-26"
㈧ shell腳本怎樣調另一個腳本文件
Shell腳本中引用、調用另一個腳本文件的2種方法
這篇文章主要介紹了Shell腳本中引用、調用另一個腳本文件的2種方法,本文介紹了兩種方法的語法,然後給出實際使用實例和一些要注意的地方,需要的朋友可以參考下
在Java,Python中,可以用import的方式來進行腳本或模塊之間調用,例如:
復制代碼
代碼如下:
>>> import math
>>>
math.sqrt(4)
2.0
在Shell中要如何調用別的shell腳本,或別的腳本中的變數,函數呢?
方法一: . ./subscript.sh
方法二: source ./subscript.sh
注意:
1.兩個點之間,有空格,千萬注意.
2.兩個腳本不在同一目錄,要用絕對路徑
3.為簡單起見,通常用第一種方法
例如:
復制代碼
代碼如下:
main.sh #主腳本
subscripts.sh
#子腳本,或者說被調腳本
[code]
[code]
###subscripts.sh 腳本內容如下:###
#!/bin/bash
string="Hello,World! \n"
復制代碼
代碼如下:
###main.sh 腳本內容如下###
#!/bin/bash
. ./subscripts.sh
echo -e ${string}
exit 0
輸出結果:
復制代碼
代碼如下:
# chmod +x ./main.sh
# ./main.sh
Hello,World!
#
注意:
1.被調腳本可以沒有執行許可權,調用腳本必須有可執行許可權
2.chmod +x ./main.sh
#注意這里要有點,否則bash腳本可能找不到
㈨ shell腳本怎麼隨機調用其他腳本
1. 計算出當前目錄下以.sh結尾的腳本數目(假設頭腳本不在這個文件夾里):num=`ls *.sh|wc -l`
2. 獲取當前秒數:sec=`date +%s`
3. 基於腳本數目計算隨機數(范圍1~$num):randNum=`expr $sec % $num + 1`
4. 根據隨機數調用腳本:sh /path/`ls|sed -n ${randNum}p`
㈩ shell腳本for循環中如何調用別的程序
把你的.C文件編譯成可執行文件,比如你將hello.c編譯成文件名為hello的可執行文件,且該可執行文件在目錄/usr/bin下,你就可以這么來重復調用該程序:
#!/bin/bash
i=1
for((i=1;i<=300;i++));do
/usr/bin/hello #文件路徑不限
done
試試,應該可以!