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。然后依次读取。