日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

linux脚本for使用(linux for 脚本)

發(fā)布時(shí)間:2023/12/3 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 linux脚本for使用(linux for 脚本) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

linux下怎么運(yùn)行bash腳本?

sh filename.sh 你也可以直接 ./filename 注意前面的==> ./ <== 不過(guò)你首先要ls -l確定一下這個(gè)文件又沒(méi)有執(zhí)行權(quán)限。

Linux中,shell腳本如何使用信號(hào)機(jī)制去控制線程的開(kāi)啟關(guān)閉?

trap是Linux的內(nèi)建命令,用于捕捉信號(hào),trap命令可以指定收到某種信號(hào)時(shí)所執(zhí)行的命令。trap命令的格式如下:trap command sig1 sig2 ... sigN,當(dāng)接收到sinN中任意一個(gè)信號(hào)時(shí),執(zhí)行command命令,command命令完成后繼續(xù)接收到信號(hào)前的操作,直到腳本結(jié)束。 利用trap命令捕捉INT信號(hào)(即與Ctrl+c綁定的中斷信號(hào))。trap還可以忽略某些信號(hào),將command用空字符串代替即可,如trap "" TERM INT,忽略kill %n和Ctrl+c發(fā)送的信號(hào)(kill發(fā)送的是TERM信號(hào))。Linux更強(qiáng)勁的殺死進(jìn)程的命令:kill -9 進(jìn)程號(hào)(或kill -9 %n作業(yè)號(hào))等價(jià)與kill -KILL 進(jìn)程號(hào)。

舉個(gè)例子

最近小A需要生產(chǎn)2015年全年的KPI數(shù)據(jù)報(bào)表,現(xiàn)在小A已經(jīng)將生產(chǎn)腳本寫(xiě)好了,生產(chǎn)腳本一次只能生產(chǎn)指定一天的KPI數(shù)據(jù),假設(shè)跑一次生產(chǎn)腳本需要5分鐘,那么:

如果是循環(huán)順序執(zhí)行,那么需要時(shí)間:5 * 365 = 1825 分鐘,約等于 6 天

如果是一次性放到linux后臺(tái)并發(fā)執(zhí)行,365個(gè)后臺(tái)任務(wù),系統(tǒng)可承受不住哦!

既然不能一次性把365個(gè)任務(wù)放到linux后臺(tái)執(zhí)行,那么,能不能實(shí)現(xiàn)自動(dòng)地每次將N個(gè)任務(wù)放到后臺(tái)并發(fā)執(zhí)行呢?當(dāng)然是可以的啦。

#! /bin/bash

source /etc/profile;

# -----------------------------

tempfifo=$$.fifo # $$表示當(dāng)前執(zhí)行文件的PID

begin_date=$1 # 開(kāi)始時(shí)間

end_date=$2 # 結(jié)束時(shí)間

if

then

if

then

echo "Error! $begin_date is greater than $end_date"

exit 1;

fi

else

echo "Error! Not enough params."

echo "Sample: sh loop_kpi 2015-12-01 2015-12-07"

exit 2;

fi

# -----------------------------

trap "exec 1000>&-;exec 1000

mkfifo $tempfifo

exec 1000$tempfifo

rm -rf $tempfifo

for ((i=1; i

do

echo >&1000

done

while

do

read -u1000

{

echo $begin_date

hive -f kpi_report.sql --hivevar date=$begin_date

echo >&1000

} &

begin_date=`date -d "+1 day $begin_date" +"%Y-%m-%d"`

done

wait

echo "done!!!!!!!!!!"

第6~22行:比如:sh loop_kpi_report.sh 2015-01-01 2015-12-01:

$1表示腳本入?yún)⒌牡谝粋€(gè)參數(shù),等于2015-01-01

$2表示腳本入?yún)⒌牡诙€(gè)參數(shù),等于2015-12-01

$#表示腳本入?yún)⒌膫€(gè)數(shù),等于2

第13行用于比較傳入的兩個(gè)日期的大小,>是轉(zhuǎn)義

第26行:表示在腳本運(yùn)行過(guò)程中,如果接收到Ctrl+C中斷命令,則關(guān)閉文件描述符1000的讀寫(xiě),并正常退出

exec 1000>&-;表示關(guān)閉文件描述符1000的寫(xiě)

exec 1000

trap是捕獲中斷命令

第27~29行:

第27行,創(chuàng)建一個(gè)管道文件

第28行,將文件描述符1000與FIFO進(jìn)行綁定,寫(xiě)的綁定,則標(biāo)識(shí)對(duì)文件描述符1000的所有操作等同于對(duì)管道文件$tempfifo的操作

第29行,可能會(huì)有這樣的疑問(wèn):為什么不直接使用管道文件呢?事實(shí)上這并非多此一舉,管道的一個(gè)重要特性,就是讀寫(xiě)必須同時(shí)存在,缺失某一個(gè)操作,另一個(gè)操作就是滯留,而第28行的綁定文件描述符(讀、寫(xiě)綁定)正好解決了這個(gè)問(wèn)題

第31~34行:對(duì)文件描述符1000進(jìn)行寫(xiě)入操作。通過(guò)循環(huán)寫(xiě)入8個(gè)空行,這個(gè)8就是我們要定義的后臺(tái)并發(fā)的線程數(shù)。為什么是寫(xiě)空行而不是寫(xiě)其它字符?因?yàn)楣艿牢募淖x取,是以行為單位的

第37~42行:

第37行,read -u1000的作用就是讀取管道中的一行,在這里就是讀取一個(gè)空行;每次讀取管道就會(huì)減少一個(gè)空行

第39~41行,注意到第42行結(jié)尾的&嗎?它表示進(jìn)程放到linux后臺(tái)中執(zhí)行

第41行,執(zhí)行完后臺(tái)任務(wù)之后,往文件描述符1000中寫(xiě)入一個(gè)空行。這是關(guān)鍵所在了,由于read -u1000每次操作,都會(huì)導(dǎo)致管道減少一個(gè)空行,當(dāng)linux后臺(tái)放入了8個(gè)任務(wù)之后,由于文件描述符1000沒(méi)有可讀取的空行,將導(dǎo)致read -u1000一直處于等待。

linux運(yùn)行腳本不需要什么權(quán)限?

運(yùn)行腳本需要權(quán)限,需要可執(zhí)行權(quán)限。

linux編寫(xiě)腳本權(quán)限不夠怎么解決?

權(quán)限不夠可以通過(guò)su命令切換到root用戶(hù)來(lái)運(yùn)行命令。需要輸入root用戶(hù)的密碼。

用法示例:切換到root用戶(hù)$ su方法二:使用sudo命令,針對(duì)單個(gè)命令授予臨時(shí)權(quán)限。sudo僅在需要時(shí)授予用戶(hù)權(quán)限,減少了用戶(hù)因?yàn)殄e(cuò)誤執(zhí)行命令損壞系統(tǒng)的可能性。

sudo也可以用來(lái)以其他用戶(hù)身份執(zhí)行命令。

總結(jié)

以上是生活随笔為你收集整理的linux脚本for使用(linux for 脚本)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。