shell腳本local
『壹』 shell中使腳本可隨意執行
其實不用放到~/usr/bin這個路徑
只要把你的腳本所在的路徑放到系統的$PATH裡面,就可以執行了
例如腳本在/local裡面
你可以export PATH=$PATH:/local
這樣你的腳本就可以在任何目錄下執行了
『貳』 Red Hat 5上運行shell腳本時出現以下錯誤syntax error near unexpected token 『local'
function func1 少了()
#!/bin/bash
hello="var1"
echo $hello
function func1(){
local hello="var2"
echo $hello
}
echo $hello
試一下.
『叄』 如何使shell腳本成為守護進程
1,if條件語句裡面表達式要與左右[ ] 用空格隔開,否則運行時會報錯
2,用表達式給變數負值時要將表達式放在括弧()裡面,並在前面加符號"$",應該還有其他方法 目前只會這種,在參考那篇博客用單引號運行無法通過。
3,ps aux | grep $PROGRAM | grep -v grep | wc -l 此表達式檢測運行進程數量
4,ps aux | grep $PROGRAM | grep T | grep -v grep | wc -l 此表達式檢測進程運行狀態,0:運行 1:停止 但進程依然存在 可以通過命令 kill -SIGSTOP pid 進行測試
第一個條件判斷目標進程運行數目 數目小於1即為0 則運行目標進程
第二條件判斷目標進程是否處於停止狀態 處於停止狀態則kill掉 重新運行該進程
應用程序編譯完及腳本編寫好後,在/etc/rc.local 文件中添加執行語句 /usr/mytest/mytest.sh & 重啟後就能自動載入守護進程了。
『肆』 linux下如何寫個SHELL腳本,每天執行這么幾句命令:
1、登錄CentOS7系統,打開終端,輸入命令env shell列印出shell進程的環境變數。
『伍』 shell腳本怎麼設置執行程序的時間 比如每個月的5號執行
只需編輯/etc/init.d/rc.local文件,在最後加上你的腳本即可。
比如:我已經編寫了一個腳本shell.sh,存放在/home/mars704/Desktop/ 下面
在終端輸入 gedit /etc/init.d/rc.local編輯文件,在結尾出加入:
/home/mars704/Desktop/sh.sh 即可開機自動載入腳本
首先,linux隨機啟動的服務程序都在/etc/init.d這個文件夾里,裡面的文件全部都是腳本文件(腳本程序簡單的說就是把要運行的程序寫 到一個 文件里讓系統能夠按順序執行,類似windows下的autorun.dat文件),另外在/etc這個文件夾里還有諸如名為rc1.d, rc2.d一直到rc6.d的文件夾,這些都是linux不同的runlevel,我們一般進入的X windows多用戶的運行級別是第5級,也就是rc5.d,在這個文件夾下的腳本文件就是運行第5級時要隨機啟動的服務程序。需要注意的是,在每個rc (1-6).d文件夾下的文件其實都是/etc/init.d文件夾下的文件的一個軟連接(類似windows中的快捷方式),也就是說,在 /etc/init.d文件夾下是全部的服務程序,而每個rc(1-6).d只鏈接它自己啟動需要的相應的服務程序!
要啟動scim(某一 程序),我們首先要知道scim程序在哪裡,用locate命令可以找到,scim在/usr/bin/scim這里,其中usr表 示是 屬於用戶的,bin在linux里表示可以執行的程序。這樣,我就可以編寫一個腳本程序,把它放到/etc/init.d里,然後在rc5.d里做一個相 應的軟鏈接就可以了。
這個腳本其實很簡單,就兩行:
#!/bin/bash
/usr/bin/scim
第一行是聲明用什麼終端運行這個腳本,第二行就是要運行的命令。
還 需要注意的一點是,在rc5.d里,每個鏈接的名字都是以S或者K開頭的,S開頭的表示是系統啟動是要隨機啟動的,K開頭的是不隨機啟動的。這 樣,你就可以知道,如果我要哪個服務隨機啟動,就把它名字第一個字母K改成S就可以了,當然,把S改成K後,這個服務就不能隨機啟動了。因此,我這個鏈接 還要起名為SXXX,這樣系統才能讓它隨機啟動。在RH下,rc.local是默認啟動的最後一個腳本文件,所以,如果你想要隨機啟動,還有一種方法就是在rc.local的尾部加入/usr/bin/scim,這樣就可以了
『陸』 開機自動運行 shell腳本 怎麼寫
可以編輯/etc/rc.local文件添加上述操作命令。
腳本修改完畢後,添加可執行許可權chmod +x. /etc/rc.local
再進行重啟測試。
『柒』 shell腳本:從遠程伺服器下載文件到本地
a.
至少有三種在外通用:
(1)setup
$home/.rhosts
for
rcp,
remsh
等等
(2)setup
$home/.netrc
for
ftp
(3)ssh,scp
要判斷文件是否下載成功,最簡單的就是用check
sum
(linux/unix的通用command是
cksum)。好比你用個script去scp
file回來後,應該也執行一個ssh去遠端做個cksum,把cksum的output存起來,回到local做同樣的cksum,兩個一比較就知道了。按理說,這些利用tcp/ip的protocol寫的自動會做error
checking而且要是有error自動會re-transmit,不過你還是要考慮local的file
system是不是爆了等等,所以最簡單的做法就是兩邊都做cksum一比就知道了。
『捌』 shell編程中,如何將編寫的腳本把其腳本名當做shell命令來使用
首先確保你的shell腳本正確,且有執行許可權。
然後sudo cp 目錄/你的腳本文件名 /bin/你的腳本文件名
然後就可以了。
直接用
你的腳本文件名當作shell命令了。
看我的例子
sudocp/home/blue/mvmv.sh/bin/mvmv.sh
mvmv
然後我的桌面上的stop文件就變成了STOP了。(因為我的shell腳本如下)
#!/bin/bash
cd/home/blue/Desktop/
mvstopSTOP
說明這種方法成功。
『玖』 怎樣寫一個本地shell腳本來遠程主機上的shell腳本
安裝CentOS下安裝命令很簡單,如下sudoyuminstallexpect至於Mac用戶,可以通過homebrew安裝(需要先安裝homebrew,請自行Google)brewinstallexpect測試腳本我們寫一個簡單的腳本實現scp拷貝文件,在腳本里配置密碼,保存為scp.exp如下#!/usr/bin/expectsettimeout20if{[llength$argv]<2}{puts"Usage:"puts"$argv0local_fileremote_path"exit1}setlocal_file[lindex$argv0]setremote_path[lindex$argv1]setpasswdyour_passwdsetpasswderror0spawnscp$local_file$remote_pathexpect{"*assword:*"{if{$passwderror==1}{puts"passwdiserror"exit2}"$passwd\r"exp_continue}"*es/no)?*"{send"yes\r"exp_continue}timeout{puts"connectistimeout"exit3}}注意,第一行很重要,通常我們的腳本里第一行是#!/bin/bash,而這里是你機器上expect程序的路徑,說明這段腳本是由expect來解釋執行的,而不是由bash解釋執行,所以代碼的語法和shell腳本也是不一樣的,其中setpasswdyour_passwd設置成你自己的密碼,然後執行如下命令./scp.exp./local_fileuser@host:/xx/yy/執行前確保scp.exp有執行許可權,第一個參數為你本地文件,第二個為遠程主機的目錄,運行腳本如果報錯「connectistimeout」,可以把超時設長一點,第二行settimeout20可以設置超時時間,單位是秒。腳本執行效果如下還能做什麼細心的同學一定發現了,其實expect提供的是和終端的一種交互機制,輸入密碼只是其中一種應用形式,只要是在終端阻塞需要輸入時,都可以通過expect腳本完成自動輸入,比如前面腳本里配置了兩種交互場景,一種是終端提示"password:"時輸入密碼,還有一種是提示"yes/no)?"時輸入「yes」,如果和遠程主機是第一次建立連接,執行scp.exp腳本效果是這樣的所以我們可以根據終端的提示來配置輸入命令,這樣就能達到了自動化的效果。至於處理其它交互場景,只需要照著上面的腳本依葫蘆畫瓢就行了
『拾』 編寫個shell 腳本將/usr/local/test 目錄下大於100K 的文件轉移到/tmp 目錄下
#!/bin/bash
for file in `ls /root`
do
if [ -f $file ]; then
if [ `ls -l $file|awk '{print $5}'` -gt 10000 ]; then
mv $file /tmp/
fi
fi
done
如果有什麼不懂的話可以去看看《Linux就該這么學》這本書,非常適合新手學習Linux。