1 shell简介
参考来源https://www.runoob.com/linux/linux-shell.html
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的 “shell编程” 都是指 shell 脚本编程,不是指开发 shell 自身。
Shell 编程跟 Javascript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux 的 Shell 种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)……
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。
告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
2 shell入门
(1)输出函数
echo "hello"
printf "world"
(2)变量赋值和调用
class=1
echo ${class}
declare -a arr
echo ${arr[i]}
let "j+=1"
j=$(($j+1))
(3)判断
num=$(cat ./a.log)
if ((${#nums}>3))
then
echo "hello"
fi
(4)循环
for i in `seq 0 5`
do
echo $i
done
(5)正则匹配
C_name=$(echo $file|grep -Po '[A-Z][1-2]?_[A-Za-z]+')
(6)读取时间
current_time=$(date "+%Y.%m.%d %H:%M:%S")
(7)输出文档
echo "hello" > out.txt
echo "hello" >> out.txt
(8)读取
cat ./a.log
3 shell并行计算控制
在linux中,常用做法是引入了任务队列的概念,类似socket举例中的消费者生产者模型,通过消息队列来调节供需的不平衡,参考https://blog.csdn.net/qq_34409701/article/details/52488964
而在windows subsystem for linux中,管道与命名管道(FIFO文件)无法使用,因为windows系统不支持管道与命名管道(FIFO文件)。找了很久也没看到其他可用的方法,因此,这里介绍一个自己想的笨方法,借助的是文件输出和读取。
#!/bin/bash
num=3
echo 0 > a.log
for i in `seq 1 12`
do {while (1)dosleep ${i}s cur&#61;$(cat ./a.log) if (($cur<3)) thencur&#61;$(($cur&#43;1))echo $cur > a.log./out.shcur&#61;$(cat ./a.log) cur&#61;$(($cur-1))echo $cur > a.logecho "current: "$i", nums of processing:" $cur", completed: "$com"/"12break fidone}&
done
wait