if-for-while
if
help if可以看看if的用法
if ls -l / ;then echo "ok";else echo "no" ;fi
for
for ((i=0;i<10;i++));do echo $i; done
help for里面的words:asd asd asd,word:asd
for i in aaa fff ssss aaaa;do echo $i;done
命令seq,比如seq 33:从1输出到33
for i in `seq 33`;do echo $i;done
while
help while
练习

先统计一下,并用数值法并倒过来排个序:du -a | sort -nr
思想:把统计结果逆序排列,然后开始循环,把第一个是文件的输出即可。
编程:
oldIFS=¥IFS:bash是通过IFS里面的值来进行切割的,之前存的是空格,换行,制表符,这次要换成换行符,不过先保存现场。
IFS=$'\n':加单引号是为了使得\和n合为一体,$表示取它的值
接着``里面是按照逆序r排列的,对用户输入的路径的所有文件和目录的大小信息的数据集,增强for循环遍历里面的每一个元素。
for i in `du -a $1 | sort -nr`; do
echo $1
filename=`echo i | awk '{print $2}'` : 利用echo将内容输到awk的输入流,awk对传进来的树数据做切割,打印第二列,最后赋值给filename
test里面的-f可以检查是否为文件,可以help test
if [ -f $filename ] ;then
echo $filename
exit 0 :找到最大的文件后就打印并退出小bash
fi
done
IFS=$oldIFS :恢复现场
练习
读一个文件的每一行,并打印,最后打印总共多少行。
脚本:
答案1:
name=0
oldIFS=$IFS
IFS=$‘n‘ 此处为单引号
for i in `cat read.txt`;do 此处为反引号,告诉它是命令
echo i
((num++))
done
echo num:$num
IFS=$oldIFS
答案2:
num=0
lines=`cat data | wc -l` : 拿到行数,且不显示文件名
for ((i=0;i<ilnes;i++));do
line=`head -$i data | tail -1` :先输出前i行,然后取其中的倒数后一行,给变量line(tail是取倒数后几行的)
echo line
((num++))
done
echo num:$num
答案3:
num=0
先执行一次done后面的,把data文件里的数据放到read的输入流里面,然后read一次循环一次
while read line ;do
echo $line
((num++))
done < data
echo num:$num
答案4:
export num=0
cat data | (while read line ;do 此处将cat的结果放到输入流里面,注意此处管道创建了2个进程,()又创建了1个子进程,若不加小括号,则done;后面的实际上已经返回父进程了
echo $line
((num++))
done; echo num:$num )
答案5:
export num=0
cat data | {while read line ;do
echo $line
((num++))
done; echo num:$num ;} 此处换成大括号了,且末尾得有;,这次总共只创建了2个进程了
$#和$@区别
echo $# == echo $@
for i in "$*";do 此时$*会把参数列表作为1个元素
for i in "$@";do 此时$@会把参数列表的内容分别作为元素
随机推荐
- 关于google开源的Material Design说明
原文地址:https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/wiki/Getting-Started 源码地址:h ...
- bootsctrap4 datepicker时间选择插件
现在网上基本都是v3的时间选择插件,花了点时间改了找了个v4能用的 bootstrap-datepicker <!DOCTYPE html> <html> <head&g ...
- Java Object对象中的wait,notify,notifyAll的理解
wait,notify,notifyAll 是定义在Object类的实例方法,用于控制线程状态,在线程协作时,大家都会用到notify()或者notifyAll()方法,其中wait与notify是j ...
- select —— poll —— epoll
import socket,select s=socket.socket() s.setblocking(False) s.setsockopt(socket.SOL_SOCKET,socket. ...
- 第六章、Cookies和Session
目录 第六章.Cookies和Session 一.来源 二.cookie工作原理 工作原理: 三.session的工作原理 工作原理: 四.如何操作cookie 服务端常见的cookie操作 五.案例 ...
- 第五章、Django之多表查询进阶与事务
目录 第五章.Django之多表查询 一.聚合查询 二.分组查询 三.F与Q查询 四.查询优化 五.Django开启事务 六.自定义char字段 七.ORM常用字段 第五章.Django之多表查询 一 ...
- java——多线程—启动线程
继承Thread启动线程 package com.mycom.继承Thread启动线程; /** * * 继承Thread类启动线程的步骤 * 1.定义自定义线程类并继承Thread * 2.重写ru ...
- linux和unix下crontab的使用
在LINUX中,周期执行的任务一般由cron这个守护进程来处理 [ps -ef | grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为 ...
- 构建官方example
开发工具的选择: 构建官方example:
- 虚拟机挂载U盘
1.打开运行窗口输入services.msc回车 2.启动VMware USB Arbitration Service 3.打开虚拟机 进入编辑虚拟机设置 4.选择USB3.0 复选框全部勾选,点击 ...