linuxforin
1. 在linux中 「# for i in `ls` ; do su -sh $i ; done 」命令是什麼意思
首先 在命令前面有個 '#'的意思是本句話是注釋,並不實際執行...
再說你後面語句的意思,for ... in .... ; done是循環結構,ls是查看目錄下的文件,su是以另一個身份($i),來運行一個shell,但問題是su 沒有-sh選項,也就是說你這句話應該有問題才對.
整體分析是遍歷將當前目錄下的文件,每個文件執行su -sh XXX(這里XXX是當前目錄下的所有文件),功能尚不明確,還請樓主明示.
2. linux的for循環的寫法
Linux下使用while…;do done語句來寫循環語句,其實也非常簡單,比如說,我們要寫一個循環5次的命令。
可以這樣來寫:
I=1
While [$I<=5];do
語句…
Done
I=$(($I+1))
其中,I=$(($I+1))說明我們這個循環每次遞增的數為1,也就是在I的基礎上加1,這樣就形成了循環了。
====================================
腳本1:
#!/bin/sh
for loop in 1 2 3 4 5
do
echo $loop
done
腳本2:
#!/bin/sh
for loop in "orange red blue grey"
do
echo $loop
done
有了""就是字元串,只循環一次
第二個循環的循環變數會依次為orange red blue grey中的每一個。
3. linux shell中有一個循環 for t in 1 2 3 4 5;do...... 現在希望把 1 2 3 4 5替換為txt中的數據,怎麼辦
如果只是簡單的列出數值,可以用條件判斷while do done來做,示例如下。
while read line
do
echo $line
done< file.txt
4. linux中,利用for循環實現變數i依次取值為a,b,c,d(均為變數)
foriin$a$b$c$d
do
echo$i
done
如果a b c d為字元串變數且含有空格,建議放在雙引號中,寫為 "$a" "$b" "$c" "$d"
5. linux for 循環問題!!!
兩種方法實現:
腳本:
#!/bin/bash
for i in $(seq 30);
do
if [ $i -lt 10 ] ;then
mkdir '0'$i
cp '0'$i* '0'$i/
else
mkdir $i
cp $i* $i/
fi
done
mkdir 00
cp 00* 00/
#end
C語言:
#include<stdio.h>
int main()
{ char cmd[64];
int i;
for(i=0;i<30;i++){
sprintf(cmd,"mkdir %02d\n",i);
system(cmd);
}
for(i=0;i<30;i++){
sprintf(cmd,"cp %02d* %02d/\n",i);
system(cmd);
}
return 0;
}
6. 請教大神shell的for in語句中怎麼使用多個變數
1、遍歷按空格分隔的字元串:
#!/bin/bash
servers="abc123 das 222"
for server in$servers
do
echo$server
done
2、遍歷字元串列表、用空格分隔:
#!/bin/bash
for server in a b c
do
echo$server
done
3、遍歷參數列表:
#!/bin/bash
for arg in $*
do
echo$arg
done
4、遍歷文件目錄:
#!/bin/bash
for i in ~/*.sh
do
echo$i
cat$i
done
註:$i是整個目錄和文件,for in語句也可以與` `和$( )配合使用,例如:
#!/bin/bash
for i in $(ls~/*.sh)
do
echo$i
cat$i
done
(6)linuxforin擴展閱讀:
LInux shell之(for in)用法總結
一、語法
for 變數名 in 列表 do 程序段(command) done
注意1:是變數名而不是$變數!
注意2:列表可以做文章!
二、應用
第一類:數字性循環-->seq在in後面的應用
#!/bin/bash
#也是產生等差數列-->默認是1
for i in $(seq 1 10)
#產生的是一個字元串,默認IFS是以空格隔開!
do
echo $(expr $i * 3 + 1);
#主要是復習:expr乘法的特殊用法!-->空格隔開
done
補充:產生[1,10]的自然數-->{}在in後面的應用
total=0
#全局變數for i in {1..100} #".."表示連續,默認也是IFS為空格隔開
do
((total+=i))
doneecho -e "total is:${total}"
#多行注釋
<<COMMENRfor i in mysql_{0,1,4,12}sql
#多個文件
do
echo $i
samtools view -c $i
doneCOMMENT
第二類:字元性循環
最原始的
#!/bin/bash
#使用列表for循環顯示周一到周日對應的英文-->學習日期的英文
for day in Monday Tuesday Wednesday Thursday Friday Saturday Sunday
do
echo "$day"
done
變數的類型
#!/bin/bash
list="Linux Java C++ Python"
for
i in $list
do
echo -e "Language is ${i}"
done
cat
在in後面的應用-->逐行讀取文件的內容(默認是IFS),所以不是逐行列印。
#!/bin/bashfor
in $(cat 日誌顏色.sh)
#注意:pwd當前目錄下的文件
do
echo $i
done
第三類:路徑查找
ls在in後面的命令是-->讀取當前pwd下的文件(廣義上)。
#!/bin/bash
for i in `ls`;
#ls可以結合統配符應用
do
echo $i is file name! ;
#注意:的應用
done
用通配符讀取目錄(無命令)
for
file in ~/*;
#一級目錄下的內容-->並不遞歸顯示
do
echo $file is file path ! ;
#${file}代表的是文件的全路徑
done
通過腳本傳參
#!/bin/bash
#回憶1:統計腳本參數的個數echo "argument number are $#"!
#回憶2:參數的內容-->此處可以換成$@來測試!
echo
"the input is $*"
#循環執行
for argument in "$*";
do
echo
"$argument "
done
7. Linux shell腳本for循環中in的[數據列表]從文件中取得
for i in $(cat test)
可以試試看, for之前可以指定分隔符號.
另外一般用 while read 讀取文件
還有其實上面兩種都不好, 現在主流的做法還是awk和sed處理文件, 功能強 安全
8. linux中for i in $(seq 1 ${eated} ) ——seq 1什麼意思
# seq 1 10
1
2
3
4
5
6
7
8
9
10
是從1到10
seq 1 ${eated}是從1到${eated}
$()是返回結果
就是for循環,i從1開始,自增到${eated}
9. 在linux腳本中 for a in `ls 2011*`; do tar zcvf $a.tar.gz $a done 第一個$a和第二個$a分別是什麼意思
引用前面那個 for a in 裡面的a的值
整個這個句子是先執行``裡面的ls 2011*顯示各種以2011開頭的文件,用a代替其中的每一個,一個一個循環執行,tar zcvf(z:用gzip壓縮,c創建,v可見,f指定文件名),壓縮到剛才那一個個文件.tar.gz的壓縮包。
tar命令
tar zcvf 壓縮包名 源文件名
10. Linux:關於腳本for循環的執行順序
執行一次,for in 後邊的`` 或 $() 會產生一個list。然後依次讀取。