Linux编程问题 利用for循环将当前目录下的.c文件移到指定的目录下,并按文件大小排序,显示移
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux编程问题 利用for循环将当前目录下的.c文件移到指定的目录下,并按文件大小排序,显示移相关的知识,希望对你有一定的参考价值。
参考技术A解:
dir=/home/hzxyjsj
for f in *.c
do
mv $f $dir
done
ls -S $dir
注:写法多样,这只是其中一种写法。
扩展资料:
for循环小括号里第一个“;”号前为一个为不参与循环的单次表达式,其可作为某一变量的初始化赋值语句, 用来给循环控制变量赋初值; 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式。
执行的中间循环体可以为一个语句,也可以为多个语句,当中间循环体只有一个语句时,其大括号可以省略,执行完中间循环体后接着执行末尾循环体。
参考资料来源:
百度百科-for循环
shell 编程 -for 循环,while循环,break,continue,exit
[toc]
一、for循环
重复执行一系列命令在 编程中很常见。通常你需要重复一组命令直到达到某个特定条件,比如处理某个目录下的所有文件、系统上的所有用户或者是某个文本文件中的所有行。
常见的两种循环,在脚本中普遍被用到。
for循环
while循环
语法:for 变量名 in 条件; do …; done
for var in list
do
commands
done
在list参数中,提供了迭代中要用的一系列值
示例1:用for循环来写个1-100的求和。
思路:
- [ ] 首先需要把1-100循环
- [ ] 循环一次相加一次,并赋值给sum
- [ ] 输出sum的值
- seq 这个就是遍历1-100这些数字。
[[email protected] ~]# !vim
vim sum01.sh
#!/bin/bash
sum=0
for i in `seq 1 100`
do
sum=$[ $sum+$i ]
echo $i
done
echo $sum
示例2: 遍历一个目录的目录或者文件
#!/bin/bash
cd /etc/ //脚本中如果查询的目录在多级目录下,首先要进入到目录,或者,直接跟绝对路径
for a in `ls /etc/` //遍历/etc目录
do
if [ -d $a ] //一个一个的去判断是否为目录
then
ls -d $a //如果是目录,就查看下目录内的文件+子目录
fi
done
[[email protected] ~]# !vim
vim for02.sh
#!/bin/bash
cd /etc/
for a in `ls /etc/`
do
[ -d $a ] && ls $a
# 判断是否是目录,并列出其下文件和子目录
if [ -d $a ]
then
echo $a
ls $a
fi
done
~
特殊for循环示例:list循环时,会以空格或回车符作为分隔符了
[[email protected] ~]# mkdir xavi
[[email protected] ~]# cd xavi/
[[email protected] xavi]# ls
[[email protected] xavi]# touch 1 2
[[email protected] xavi]# touch 3\ 4.txt
[[email protected] xavi]# ls
1 2 3 4.txt
[[email protected] xavi]# for i in `ls ./`; do echo $i ; done
1
2
3
4.txt //把3 4.txt一个文件拆分成两个了
二、while循环
语法:
while test command
do
other commands
done
案例1:写个脚本去监控系统的负载
#!/bin/bash
while : //:为死循环的意思,也相当于ture,
do
load=`w|head -1|awk -F ‘load average: ‘ ‘{print $2}‘|cut -d. -f1`
if [ $load -gt 10 ]
then
top|mail -s "load is high: $load" [email protected]
fi
sleep 30
// 负载有时候不可能一秒钟就起来了,所以每隔30秒判断一次即可。我们使用sleep 去暂停30秒钟。然后再次执行。。。
done
案例2: 通过和用户的交互得到一个值,并判断。
把用户输入的数字输出.
- [ ] 首先判断,如果用户没有输入怎么办?
- [ ] 用户输入的不是纯数字怎么办?
- [ ] 根据用户输入的数字,并输出。
#!/bin/bash
while :
do
read -p "Please input a number: " n
if [ -z "$n" ]
then
echo "you need input sth."
continue
fi
n1=`echo $n|sed ‘s/[0-9]//g‘`
if [ -n "$n1" ] // -n = ! -z ,记得加双引号
then
echo "you just only input numbers."
continue
fi
break
done
echo $n
-
[ ] continue: 当用户没有输入的时候,首先提示,然后继续让用户输入。直到输入是一个真正的数字,跳出if语句。
- [ ] break:如果是一个真正的数字,则跳出整个while语句。
三、break的用法
示例:
#! /bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
break
fi
echo $i
done
echo aaa
执行步骤如下:
[[email protected] xavi]# sh -x break.sh
++ seq 1 5
+ for i in ‘`seq 1 5`‘
+ echo 1
1
+ ‘[‘ 1 == 3 ‘]‘
+ echo 1
1
+ for i in ‘`seq 1 5`‘
+ echo 2
2
+ ‘[‘ 2 == 3 ‘]‘
+ echo 2
2
+ for i in ‘`seq 1 5`‘
+ echo 3
3
+ ‘[‘ 3 == 3 ‘]‘
+ break
+ echo aaaa
aaaa
也就是说,一旦遇到break就会跳出当前循环,进行下一步。
四、continue 的用法:
忽略continue之下的代码,直接进行下一次循环。
#! /bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
continue
fi
echo $i
done
echo aaa
执行结果如下:
1
1
2
2
3
4
4
5
5
aaa
也就是说,当执行到continue的时候,下面任何语句直接忽略。。直接进行了下一次for循环。
五、exit 退出整个脚本
#! /bin/bash
for i in `seq 1 5`
do
echo $i
if [ $i == 3 ]
then
exit
fi
echo $i
done
echo aaa
执行步骤如下:
++ seq 1 5
+ for i in ‘`seq 1 5`‘
+ echo 1
1
+ ‘[‘ 1 == 3 ‘]‘
+ echo 1
1
+ for i in ‘`seq 1 5`‘
+ echo 2
2
+ ‘[‘ 2 == 3 ‘]‘
+ echo 2
2
+ for i in ‘`seq 1 5`‘
+ echo 3
3
+ ‘[‘ 3 == 3 ‘]‘
+ exit
- [ ] 当直行到3的时候,直接就退出脚本 。
以上是关于Linux编程问题 利用for循环将当前目录下的.c文件移到指定的目录下,并按文件大小排序,显示移的主要内容,如果未能解决你的问题,请参考以下文章