1. linux 腳本循環
>moosewoler,你好,我的問題其實主要集中在這里:
>linux中的參數是相當於C語言中的宏還是變數呢.
shell腳本的變數會根據使用情況自動變化,有的時候行為像宏,有的時候像變數
>如果是宏的話就會完全匹配.例如: 我想用到一堆變數: >iData21,iData22,iData23....iData99
>這個時候我定義 iDataX 然後讓 X =21~99 循環,這樣可以嗎?如果是C語言是不可以的,因為21~99並非完整的一個變數,而是變數的一部分.
是可以這樣做的,將兩個變數聯合起來用就可以了,然後exec出去。
給你個鏈接《bash新手指南》,很短,很容易入門
http://www.bsdmap.com/manuals/bash_guide/index.html
使用說明:
腳本枚舉目錄中所有文件,並調用LtoT.exe來處理之。
文件名嚴格以X_nnnn.DAT命名
其中
X取值為 「C」或者「Y」
nnnn取值為 4位數字
「_」和「.」作為awk使用的分割符一定要存在,否則會出錯。
可能存在的問題:
因為LtoT.exe和sdram422bmp.exe也被放在了當前目錄下,所以這兩個文件也會被腳本處理,也就是說會出現如下兩個命令行
./LtoT.exe LtoT.exe LtoT_tile.exe 16 2048 LtoT.exe
./LtoT.exe sdram422bmp.exe sdram422bmp_tile.exe 16 2048 sdram422bmp.exe
不過因為第2個循環的條件檢驗夠強,所以不會影響到第2個循環的輸出。
腳本全文如下:
#! /bin/sh
BIN1="./LtoT.exe"
BIN2="./sdram422bmp.exe"
#枚舉當前目錄下的文件名,並生成參數列表
for FILENAME in `ls` ;do
if [ "$FILENAME" != "a" ]; then
flag=`echo $FILENAME | grep tile`
flag=`echo $?`
if [ "$flag" != "0" ]; then
tmpARG1=`echo $FILENAME`
tmpARG2=`echo $FILENAME | awk 'BEGIN { FS="."} {print $1 "_tile." $2}'`
tmpARG3="16"
tmpARG4="2048"
tmpARG5=`echo $FILENAME | awk 'BEGIN { FS="_"} {print $1}'`
#執行之
`$BIN $tmpARG1 $tmpARG2 $tmpARG3 $tmpARG4 $tmpARG5`
fi
fi
done
for FILENAME in `ls | grep "^Y.*tile"` ;do
tmpARG1="2048"
tmpARG2="16"
tmpARG3="16"
tmpARG4=$FILENAME
tmpARG5=`echo $FILENAME | sed 's/^Y/C/'`
tmpARG6=`echo $FILENAME | awk 'BEGIN { FS="_" } {print "result_"$2".bmp"}'`
`$BIN $tmpARG1 $tmpARG2 $tmpARG3 $tmpARG4 $tmpARG5 $tmpARG6`
done
模擬顯示結果(我只是ECHO出來,_tile文件提前建立好了,你可以不必):
moose@iMove:~/tmp$ ls -l
total 4
-rwxr--r-- 1 moose moose 978 02-19 20:19 a
-rw-r--r-- 1 moose moose 0 02-19 19:40 C_0026.DAT
-rw-r--r-- 1 moose moose 0 02-19 20:00 C_0026_tile.DAT
-rw-r--r-- 1 moose moose 0 02-19 19:40 Y_0039.DAT
-rw-r--r-- 1 moose moose 0 02-19 20:00 Y_0039_tile.DAT
moose@iMove:~/tmp$ ./a
./LtoT.exe C_0026.DAT C_0026_tile.DAT 16 2048 C
./LtoT.exe Y_0039.DAT Y_0039_tile.DAT 16 2048 Y
./sdram422bmp.exe 2048 16 16 Y_0039_tile.DAT C_0039_tile.DAT result_0039.bmp
2. linux shell腳本的循環
for i in $(cat test)
可以試試看, for之前可以指定分隔符號.
另外一般用 while read 讀取文件
還有其實上面兩種都不好, 現在主流的做法還是awk和sed處理文件, 功能強 安全
這樣可以么?
3. 關於linux的shell腳本,無限循環問題
10毫秒起一個java,1秒就起來100個java,
10秒就啟動了1000個java
4. linux shell腳本:while循環中調用另一個腳本遇到exit為什麼會跳出循環,且繼續執行循環後的程序
exit是在被調用的腳本裡面,肯定會退出被調用的腳本了。如果不想繼續執行while循環後面的程序可以在do後面的條件上加上break
5. 熟悉linux中cshell腳本的朋友幫忙解惑,這個循環出問題了
if($overrun != 1)then 加上空格改成
if ( $overrun != 1 ) then 試試
6. linux遠程登陸的shell腳本for循環無結果
我比較認同「ssh之後是遠程主機執行的命令
本地變數不起作用」這種說法
你的腳本之所以$aaa能回顯,是因為在本地定義了這個變數,但本地沒有定義$i這個變數,所以無法顯示變數值,把aaa="u1 u2"一塊塞<<ff.......ff這個內聯重定向數據中去。再試試看。
7. shell while 為何不跳出循環
do語句要提前一行。
while循環用於不斷執行一系列命令,也用於從輸入文件中讀取數據;命令通常為測試條件。其格式為:while command
do
Statement(s) to be executed if command is true
done
命令執行完畢,控制返回循環頂部,從頭開始直至測試條件。
8. 求linux腳本思路,跳出循環問題
我的想法是這樣的,
你應該有一腳本執行你上面寫的循環,
然後有另一人腳本負責啟動停止.
啟動時把第一個腳本執行起來就可以了.
停止時,查找第一個腳本的PID
然後KILL掉就可以了.
9. 關於linux shell腳本中for循環的問題
你的變數指定的有問題。你可以這么寫:
#!/bin/bash
for i in $( seq 1 100 )
do
echo $i
done