shell腳本read
1. 用shell寫腳本的時候,read命令報錯,本來想read一個name變數的,運行之後這行報錯。
按照我的經驗,某些環境下的預設變數需要用空格空出來
read [] name
2. shell腳本while read循環無法執行命令,不用循環卻可以執行,這是為什麼
whilereadline
do
#處理$line即每行文本
done<file.txt
或者:
catfile.txt|whilereadline
do
#處理$line即每行文本
done
檢查下你的代碼格式,是不是符合上述兩種之一。
3. linux的shell腳本的read怎麼換行輸入
在末尾加反斜桿\,即可換行輸入
4. shell腳本 判斷read的字元串是不是純數字
如果你是bash 3.0 或以上,可以這樣寫:
if [[ "$c" =~ "^[0-9]+$" ]]; then
echo "Number"
else
echo "Not a number!"
fi
5. linux shell read命令被跳過
read是讀取你在屏幕上內容的。。。。如果你不輸入,肯定是NULL
6. linux shell 跳過read命令,怎麼解決
read默認從標准輸入讀取數據,而這里的管道符會將前面ls命令的結果作為標准輸入傳遞給read命令。所以只要前面還有數據,read命令就不會等待用戶輸入。
其實,這里可以用 for ... in ... 結構來替代while循環。
forl1in`ls$d1`
do
read-p"1or0"y1
......
done
7. shell腳本中執行 read x 後,x立即分配內存嗎分配多少
不是立即分配的
輸入read x之後,按下回車鍵,shell會等待你輸入。只有在你輸入完成後,按下ctrl+D之後,shell才會重新回到命令提示符狀態
變數x的大小跟你輸入字元的多少有關
8. shell 腳本 while read a b c d ;do done語句中 a b 的值於最外層不一致
while循環一次只讀一行,直至讀到文件末尾。你試試下面這個:
while read line
do
echo "$line"
done <./data/1/statusl.txt
就會列印:
335
1
2
00
你要把每行取出來分別賦給一個變數的話,用sed 或 head 即可。
a=`sed -n '1p' ./data/1/statusl.txt`
b=`sed -n '2p' ./data/1/statusl.txt`
或者
a=`head -n 1 ./data/1/statusl.txt`
b=`head -n 2 ./data/1/statusl.txt`
而且上面的awk語句也有錯誤,把$a,$b放在單引號裡面會被認為是awk的變數,不會被shell解析並替換成對應的值的。需要拿到單引號外面來(在$a前關閉單引號,$a之後再打開;$b同樣處理)。並且,awk默認的欄位分隔符就是空格,所以沒必要再用 -F 指定。
修改如下:
awk '{if($1==『$a』 && $2==『$b』){print $1;}print 『$a』,22}' ./data/1/statusl.txt
最後,實在不知道你要干什麼。因為awk本身就會讀文件,而且也是一行一行地讀。
statusl.txt 只有1列,以空格作為分隔符,只能得到一個欄位($1),$2不存在。 所以,上面我改的那句其實也是不對的。
9. shell腳本的read -p寫法
關於第一個問題:-p: is not an identifier
有可能是因為你的PATH的設定。
你可以在第一個read之前加一行
type read
看看這個read是從哪裡來的
同時直接在你的Unix prompt里也輸入type read看看結果
應該得到的是同樣的答案(read is a shell builtin)
Good Luck!
10. shell腳本中的read和done
while循環結構如下:
while 條件
do
...
done
應該前面還有個do的。這是固定結構,滿足條件就會一直循環下去。
因為最後有輸入重定向符號<,將整個while循環條件的輸入指定為config變數定義的文件。所以,read會逐行讀取這個文件中的欄位(每行兩個欄位)分別作為server和ip。
需要注意的是,config.ini文件中的標題行也會被讀入。
man read,說明中可以看到,如果讀成功的話,read返回讀取的位元組數;讀到文件的末尾則返回0。而對於while來講,條件為0表示為false,則退出循環。