Linux下shell编程学习
1.题外话
- 自从第一次写完博客(关于蓝桥杯)之后,又一个星期过去了,本来计划是一周最起码写一篇博客来记下自己在一周之内的进步(学习),从而也方便自己以后回顾学习,但是最终自己还是被各种事情拖延,自己整体有时候就是不想学习,不想去弄这个,觉得排版、打字、找材料特别麻烦费时间,宁愿坐着也不愿意去弄,到了不能再拖得时候,就起身去弄这个了,有时候发现并不是整个事情特别麻烦,而是缺少去尝试的勇气,自己想象中觉得麻烦,就没有去弄,结果自己亲自去做的时候,发现也不是那么麻烦,反而做的时候很有感觉,觉得自己在进步,又讲了很多废话,总之,生活中还是要勇于尝试,这样自己才会一直进步。
- 对了,分享一个自己看到的一天的计划,包括学习和放松,觉得挺好;
2.shell编程学习
- echo
- 类似于C语言中的printf一样,是输出打印的东西。
- 如果要输出变量的值,当然肯定也是可以的,对于于printf就可以知道。
shell zgq@123:~$ echo "you are a lovely girl!" you are a lovely girl! ##直接在终端就输出.
zgq@123:~$ echo &date "+%B%d%A" ##date是变量,然后以月日星期的格式输出
四月08星期一 ##终端输出
- 当然如果你想直接输出日期,也是可以的,以它默认的格式,唯一注意的就是输出变量的时候需要加 “&”这个符号。
- 除此之后,也可以不加 "&"这个符号,直接用反引号直接括起来,也可以直接输出。
zgq@123:~$ echo `date`
2019年 04月 08日 星期一 22:40:19 CST
```
* 这都是在终端直接输出指令,当然也可以建立shell指令文件,然后设置该文件权限,然后运行即可。
```shell
#!/bin/sh
echo "Mr.$USER,Today is:"
echo `date "+%B%d%A"`
echo "wish you a lucky day!"
## 然后设置文件权限,用到chmod指令,设置该文件 可读可写可操作,然后运行该shell文件,即可得到运行结果。
zgq@123:~~/bin$ chmod 700 FirstShell
zgq@123:~/bin$ ./FirstShell
Mr.zgq,Today is:
四月08星期一
wish you a lucky day!
* 关于chmod指令,可以在这里说一下,用法为 chmod [abc] 文件或目录
a,b,c,分别代表user,group,other的权限,然后r=4,w=2,x=1,代表读,写,可执行的权限,0就是没有该权限。
例如 chmod 666 FirstShell 设置该bash文件user,group,other的权限都为可读可写,但是不能操作。
- if
判断语句,主要是判断的方式不同,-r 表示为真,-d表示目录为真等。
shell #! /bin/bash echo "Please enter the directory name of file name" read dd if [ -r $dd ] then ls $dd else echo "input error" fi
shell zgq@123:~/bin$ chmod 700 shell212 zgq@123:~/bin$ ./shell212 Please enter the directory name of file name ZGQ
##输入文件夹名称,并且可读 Add.c Add.o hello.h Makefile print.h test test.o ##列出文件夹下的名称 Add.h hello.c hello.o print.c print.o test.c
for与C语言的中for使用类似,下面的函数为计算1-1/2+1/3-1/4+1/5-………-/+ 1/n,n由用户输入
shell #! /bin/bash
read n
total=0.0000 an=0.0000
val=0 begin=$(date +%s) #记录开始时间
for((num=1;num<=$n;num++));
do i=$num ##循环变量
if [ $i != 0 ]
then
an=`echo "scale=4;1.0000/$i" | bc` ##bc用来表示计算小数,scale表示计算保留的小数位数, val=`expr $i % 2` ##判断是否为偶数,分析上面题目可知,可知偶数为-,奇数为+
if [ $val == 0 ] #若为偶数,则-,否则为+
then total=`echo "scale=4;$total-$an" | bc`
else total=`echo "scale=4;$total+$an" | bc`
fi
fi
done
end=$(date +%s)
cost=$(($end - $begin)) #输出计算时间 echo $total #计算处结果 echo "花费的时间是$cost s"
shell zgq@123:~/bin$ ./shell218 500 .6909 花费的时间是4 s