Ⅰ shell1腳本批處理導出數據到a文件到文件伺服器shell2腳本通過中間件連接至文件伺服器讀取a文件數據
分成2段,第一段就是從資料庫導出數據,生成文件a,把a放到某個機子上;用shell實現(如果是這樣的話應該不難實現)
第二段,shell2腳本通過中間件連接至文件伺服器讀取a文件數據--這個就不懂了,shell2為何要通過中間件讀取A文件。。是需要前端展示?是不是shell2啟動中間件上的應用還是說這shell就是應用本身。
問題太不明確了,這么長一條線,模凌兩可的一句話誰知道要怎麼處理
Ⅱ 如何用shell腳本將txt文件中的數據:張三 李四 男 女 20 22, 輸出為:張三 男 20 李四 女 22
1、思路
列印奇數行,將列變為行
列印偶數行,將列變為行
2、實例:
#!/bin/sh
cat a.txt|awk 'NR%2'|awk -vFS='\n' -vORS='' '$1=$1' >> b.txt
cat a.txt|awk '!(NR%2)'|awk -vFS='\n' -vORS='' '$1=$1' >> b.txt
more b.txt
Ⅲ 求助,shell 腳本批量數據的處理
沒太聽懂你的意思,如果用bash來寫,可以通過數組來控制,比如
數組TraceNum[1] 和對應的PackNuo[1] 數組里邊的下標可以用變數來控制。
不知道是不是你想要的效果,具體還是沒聽懂你想幹嘛。
Ⅳ Shell腳本清除臟數據
假設原數據為file.txt,那麼下面這條語句就可以做這個事情。
awk-F,'NF==5{print}NF!=5{getlinea;print$0""a}'file.txt
基於逗號分隔的欄位數(此例為每行5個欄位)來判斷當前行是否完整。
不完整的話就讀入下一行與當前行合並後輸出。
目前僅處理只換了一行的情況。
實測結果如下:
你可以用輸出重定向將結果保存到文件。
Ⅳ linux中設計一個shell腳本程序可以接受命令行輸入的參數執行相應的菜單命令
之所以用到命令行參數,關鍵在於shell腳本需要與運行腳本的人員進行交互。
bash shell提供了命令行參數添加在命令後面的數據值)、命令行選項修改命令行為的單字元值)和直接讀取鍵盤輸入。
1、命令行參數
向shell腳本傳遞數據的最基本方式是使用命令行參數。
1)讀取參數
讀取輸入的參數的變數為位置參數,位置參數通過標准數字表示,
其中$0為程序名稱,$1為第一個參數,$2為第二個參數,依次類推,直到$9為第九個參數。
shell腳本自動將命令行參數賦值給各個位置變數。
同時輸入多個參數可以是數值也可以是字元串)時,必須使用空格分隔要想在參數值中包含空格,就必須使用單引號或雙引號)
當參數多於9個後,必須在shell腳本內使用大括弧將變數括起來,如${10}。從而可以使用任意個參數。
2)讀取程序名稱
傳遞給變數$0的字元串實際上是程序的路徑根據調用方法決定是相對還是絕對路徑)。
使用basename命令可以去掉路徑前綴,只獲得程序名稱名字中不 可以有空格)。
3)測試腳本
當腳本認為應該包含參數,卻實際上沒有數據時,就會出錯。
好的方法是對參數進行檢查來保證使用參數前確實存在數據,可以使用-n參數來檢查。
例子:if [ –n 「$1」 ] then .. else .. fi
2、特殊的參數變數
用於跟蹤命令行參數
1)參數計數
使用特殊變數$#測試執行腳本時包含的命令行參數個數。腳本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可測試參數個數
可以使用${!#}來返回最後一個命令行參數當無參數時,$#為0,而${!#}為程序名)
2)獲取所有數據
變數$*將命令行中提供的所有參數作為一個單詞處理,它將多個參數看成 一個參數。
變數$@將命令行中提供的所有參數作為同一個字元串中的多個單詞處理。 允許對其中的值進行迭代一般使用for),分隔開不同參數
3、移位
shift命令能夠改變命令行參數的相對位置。默 認將每個參數變數左移一個位置變數$0不變,把$1丟棄,注意不可以恢復了!)
在不清楚參數數目情況下,這是一個迭代參數的好辦法。
可以為shift提供一個參數,來實現多位移變化。
4、處理選項
選項是由破折號引導的單個字母,用於更改命令的行為。
1,找出選項
1)處理簡單選項
可以使用處理命令行參數相同的方法處理選項,抽取時使用case語句進行判斷是否符合選項格式。
2)從參數中分離選項
同時使用選項和參數時,可以使用--指示選項列表的結束。發現--後,shell就知道後面的是普通參數了,停止使用case處理選項。
3)處理帶值的選項
選項後緊跟參數值,一種方法是在case中對應選項後使用shift和讀後一位參數的方法處理。更好的方法如 下:
2,使用getopt命令
getopt命令在處理選項和參數時非常方便。它對參數進行重新組 織,以便於解析
1)命令格式
getopt可以接受任意形式的選項和參數列表,並自動將它們轉換為適當的格式。
命令格式為: getopt options optstring parameters
選項字元串(opstring)用於定義命令行中的有效選項字母,以及哪些選項字母需要參數值。
2)腳本中使用getopt
需要使用set命令將現有的命令行選項和參數替換為getopt命令生成的 格式化形式。
需要將原始腳本命令行參數送給getopt命令,然後將getopt命令輸出送給set命令,如下:set – `getopts –q ab:cd 「$@」`
但是getopt命令不能很好的處理帶有空格的參數值,它將空格解析為參數分隔符,而不是將雙引號引起來的兩個 值合並成一個參數。解決辦法如下:
3)更高級的getopts命令
getopts命令順序的對現有的shell參數變數進行處理,每調用一次,只處理命令中檢測到的參數中的一個。處理完所有參數後,以大於0的退出 狀態退出。
非常適宜於在循環中解析所有命令行參數
格式為: getopts optstring variable
$optarg包含需要參數值的選項要使用的值,$optind包含getopts停止處理時在參數列表中的位置。
注意:當getopts處理時,會將選項前的-去掉,所以對應的case中不需要破折號。
好的特性:
1)可以在參數值中包含空格
2)選項字母和參數值中間可以沒有空格
3)將在命令行中找到的未定義的選項都綁定為單一的輸出——問號
5、標准化選項
有一些字母選項具有標准含義。最好按照標准含義定義選項意義
-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y
6、獲取用戶輸入
當需要在執行過程中獲得執行腳本人員的輸入,使用read命令
1)基本讀取
read命令接受標准輸入或其他文件描述符輸入。讀入後將數據放入 一個標准變數中。
-p 允許在read命令行中直接指定一個提示。
可以指定多個變數,也可以不指定將放置在reply環境變數中)
2)計時
使用-t指定一個計時器,計時數滿還未輸入,read返回一個非0的退出狀態。
使用-n指定輸入的字元個數,輸入達到預定數目時,就自動結束輸入
3)默讀
使用-s使輸入不顯示在終端例如輸入密碼)
4)讀取文件
最常用的方法是使用cat命令,並通過管道傳給包含read的while語句。
Ⅵ shell腳本中實現對oralce資料庫的操作
試一下,我沒環境,不能幫你測試,有問題聯系
在表名的文件中,增加表結構說明,格式如下:
field1,field2,field3,.....,fieldn
load_data()
{
TABNAME=$1
DATAFILE=$2
crt_ctlfile $TABNAME $DATAFILE
sqlldr $username/$password control=loader.ctl
if [ $? -ne 0 ]
then
echo "error load $TABNAME!"
exit -1
fi
}
crt_ctlfile()
{
echo "load data" > loader.ctl
echo "infile '$2'" >> loader.ctl
echo "into table $1" >> loader.ctl
echo "fields terminated by \"|\" optionally enclosed by '\"'" >> loader.ctl
echo "(" >> loader.ctl
cat tablelist/$1 >> loader.ctl
echo ")" >> loader.ctl
}
if [ $# -ne 2 ]
then
echo "usage: $0 username password"
exit
fi
username=$1
password=$2
tabname=`ls tablelist`
for tab in $tabname
do
if [ -z tablelist/$tab ]
then
echo "file : $tab is null, you need to add table field!"
else
datafile=$tab.unl
if [ -s ./data/$datafile ]
then
load_data $tab $datafile
else
echo "file : $datafile is null or not exists"
fi
fi
done
Ⅶ shell腳本,對數據處理,求指導,用awk怎麼實現
用下面這個命令來執行下就行了
#awk '{k=substr($0,1,5);m[k]+=1;if($0>=l[k]){l[k]=$0};if($0<=o[k] || !o[k]){o[k]=$0}}END{for(a in m) print a,"|",m[a],"|",l[a],"|",o[a]}' 1.txt
如果想定向到別的文件,直接用">"和">>"指向的文件就行了。
上面的完全由awk實現,應該完全滿足你的需求吧?
Ⅷ [求IT大牛幫忙]shell腳本,操作資料庫(informix資料庫),求IT大牛幫忙
可能不是最佳,繞點彎子,不算高手
#! /bin/sh
dbaccess aadb 2>/dev/null << !SQL
unload to sql.txt DELIMITER " "
select * from info where date[1,4]=YEAR(CURRENT) and date[5,6]=MOUTH(CURRENT) and date[7,8]=DAY(CURRENT)
!SQL
if (wc -l sql.txt = 0);then
dbaccess aadb2>/dev/null <<!SQL
insert into info values("?","?")
!SQL
fi
Ⅸ linux shell腳本 批處理
新建一個文件,名字為test(自己定義的名字)
nano test.sh在裡面編寫腳本
程序必須以下面的行開始(必須方在文件的第一行):
#!/bin/sh
符號#!用來告訴系統它後面的參數是用來執行該文件的程序。在這個例子中使用/bin/sh來執行程序。
(能寫一些shell普通命令,命令用分號隔開)
例子:
#! /bin/bash
# shutdown pc
sudo
shutdown +1執行方法
(1)在控制台輸入命令執行:
sh
test.sh
(2)先給腳本可執行許可權,雙擊執行:
右鍵此文件,選擇屬性->許可權,最下方會有一個「允許以程序執行文件」,將這一項勾選,就可以了。
或在命令行下附予許可權:
chmod 777
test.sh 或: chmod +x test.sh
Ⅹ shell腳本5---信號處理
默認情況下,bash shell會忽略收到的任何SIGQUIT(3)和SIGTERM(15)信號(正因為這樣互動式shell才不會被意外終止)。但是bash shell會處理收到的SIGHUP(1)和SIGINT(2)信號。
如果bash shell收到SIGHUP信號,它會退出。但在退出之前,它會將信號傳給shell啟動的所有進程(比如shell腳本)。通過SIGINT信號,可以中斷shell,Linux內核停止將CPU的處理時間分配給shell,當這種情況發生時,shell會將SIGINT信號傳給shell啟動的所有進程。
在無條件終止作業時,開始不會得到任何反應。但下次有shell提示符時,你會看到一個消息說明作業已經被終止了。
方括弧中的數字時shell分配的作業號。每當shell產生一個提示符時,它就會顯示shell中已經改變狀態的作業的狀態。在你無條件終止一個作業後,下次強制shell生成一個提示符時,shell會產生一條消息,說明作業在運行時被無條件終止了。
trap命令允許你來指定shell腳本要watch哪些linux信號並從shell中攔截。如果腳本收到了trap命令中列出的信號,它會阻止它被shell處理,而在本地處理。
trap命令的格式:
signals多個信號用空格隔開。
以下例子用trap命令來捕捉SIGINT和SIGTERM信號
當我們執行Ctrl+C時,shell腳本不會中斷。
要捕捉shell腳本的退出,只要在trap命令後加上EXIT信號就行。
執行這個腳本,在腳本執行完成退出前,會輸出Goodbye。
參數列表
jobs輸出中會有加號和減號。帶加號的作業會被當作默認作業。在使用作業控制命令時,如果未在命令行指定任何作業號,該作業會被當作操作對象。帶減號的作業則會在默認作業完成後成為下一個默認作業。任何時候只有一個帶加號和一個帶減號的作業。
在bash作業控制中,可以將已停止的作業作為前台或者後台進程重啟。前台進程會接管當前的工作終端。
nice命令允許在執行一個命令是調整它的調度優先順序。優先順序是一個整數值。從-20(最高優先順序)到20(最低優先順序)。默認情況下,bash shell以優先順序0啟動所有進程。
renice可以改變已運行命令的優先順序。
普通用戶只能調整屬於自己進程的優先順序。並且只能降低優先順序。
root可以調整任何進程的優先順序到任意級別。
如何設置一個計劃任務在每月的最後一天執行?