本次实验的内容较多,从创建文件 ,代码解读和实验结果三个方面来进行记录
创建文件
touch test.sh #在根目录下创建名为test.sh的文件
vim test.sh #使用vim打开文件进行编辑
#进入vim模式后,按i进入编辑模式
#输入:
#!/bin/bash
for((i=0;i<5;i++));do
{
sleep 1; echo 1>>a && echo "done!"
}
done
cat aa|wc -l
rm aa
#输入完成后按Esc退出编辑模式,然后输入 :wq
#保存并退出
代码解读
先简单介绍一下啊shell,shell也可以理解为命令解释器,是用来解决用户如何与操作系统通信的问题。
#!/bin/bash
这行代码代表脚本声明,即告诉系统使用哪种命令解释器执行这个脚本。
for((i=0;i<5;i++));do
{
sleep 1; echo 1>>a && echo "done!"
}
done
for循环和do就不讲了,具体讲一下内层代码的含义
-sleep 1 就是暂停疫苗一秒,看字面意思就知道睡了一秒,也就是工作暂停了一秒,睡醒了继续
-echo 1>>a 将1添加在a的后面
-echo “done!” 输出done!
cat aa|wc -l
rm aa
第一行意思是打开aa并统计行数
第二行是删除aa
实验结果
保存并退出文件后,先通过 ll 查看文件权限,user是否有运行权限,若没有
chomd u+x test.sh #添加用户可执行权限
然后输入命令
time bash test.sh
这是第一个实验的结果
可以看到最后一行的结果显示,运行完毕总共用了5.074秒
下面的这个运行结果是
#!/bin/bash
for((i=0;i<5;i++));do
{
sleep 1; echo 1>>a && echo "done!"
}&
done
wait
cat aa|wc -l
rm aa
的运行结果,他以第一个代码的区别在于done之前多了一个&,之后多了一个wait,是什么意思呢?
&的作用是将此进程放到后台执行,也就是幕后工作,就算关闭了这个终端,这个进程也不会被终止,要想要终止这个进程,那就是用jobs找到他然后kill!!!与&相对应的就是%,它的功能与&相反,%是将进程移到台前。
wait是用来阻塞当前进程的执行,直至指定的子进程执行结束后,才继续执行。使用wait可以在bash脚本“多进程”执行模式下,起到一些特殊控制的作用。(此解释来源于网络,wait的功能我还不是很了解,还在学习)
我们也可以明显的看到运行时间,确实有极大的差距!5秒到1秒差距还是很大的!!!这背后的缘由,还得在进一步探究。