曾听一位大神讲过,带着目的去学,知识往往能记得牢,记得稳。借助思维导图这个工具,对一些我感兴趣的知识点进行分类管理。以后方便自己复习。
我会以思维导图+代码段的方式,回滚学习linux shell编程。
与用户交互的接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<code>#打印一个普通的字符串</code>
<code>[root@beijing ~]</code><code># echo "it's isa dog"</code>
<code>it's is a dog</code>
<code> </code>
<code>#打印一个带有单引号和换行符的字符串,单引号可正常输出,但换行符没有效果</code>
<code>#没有达到想要的效果</code>
<code>[root@beijing ~]</code><code># echo "it's isa dog\n this is new line"</code>
<code>it's is a dog\n this is new line</code>
<code># -e 开启转义功能</code>
<code>[root@beijing ~]</code><code># echo -e "it'sis a dog\nthis is new line"</code>
<code>this is new line</code>
<code>-e </code><code>enable</code> <code>interpretation of backslash escapes</code>
<code>[root@beijing ~]</code><code># echo it is a dog</code>
<code>it is a dog</code>
<code>#红字</code>
<code>[root@beijing ~]</code><code># echo -e "\e [1;31mthisis a color\e[0m"</code>
<code>this is a color</code>
<code>[root@beijing ~]</code><code># echo -e"\033[1;31mthis is a red color\033[0m"</code>
<code>this is a red color</code>
<code>#绿底</code>
<code>[root@beijing ~]</code><code># echo -e"\e[1;42mthis is a red color\e[0m"</code>
<code>#红字绿底</code>
<code>[root@beijing ~]</code><code># echo -e"\e[1;31;42mthis is a red color\e[0m"</code>
<code>#有效数字</code>
<code>echo</code> <code>"scale=3;3/8"</code><code>|</code><code>bc</code>
<code>echo</code> <code>$</code><code>bc</code>
计算
这是编程语言的功能之一了
<code>va=1;</code>
<code>vb=2;</code>
<code>#echo $($va+$vb);error</code>
<code>#echo $(va+vb); error</code>
<code>echo</code> <code>[$va+$vb] </code><code>#output :[1+2]</code>
<code>echo</code> <code>$[va+vb] </code><code>#ok</code>
<code>echo</code> <code>$(($va+$vb)) </code><code>#//ok</code>
<code>let</code> <code>result=$va+vb </code><code>#ok</code>
<code>echo</code> <code>$result</code>
<code>result=`</code><code>expr</code> <code>3 + 1` </code><code>#ok, 注意等号,两边不能有空格;result=`expr $va + 1` 也可以</code>
<code>result=$(</code><code>expr</code> <code>$va + 1) </code><code>#ok, 注意等号,两边不能有空格,+号必须有空格,否则会当成字符串输出</code>
内置功能(感兴趣而已)
<code>[root@beijing </code><code>test</code><code>]</code><code># exportstr="1234"</code>
<code> </code><code>[root@beijing </code><code>test</code><code>]</code><code># echo $str</code>
<code>1234</code>
<code>[root@beijing </code><code>test</code><code>]</code><code># echo ${#str}</code>
<code>4</code>
这是最基本的,不能语句罗列吧
<code>#括号里不能有参数,获取参数通过$1,$2....获取</code>
<code>function</code> <code>sayhello(){</code>
<code> </code><code>echohello $1</code>
<code>}</code>
<code>#$@:参数列表</code>
<code>#$*:参数字符串</code>
<code>sayhello zgy;</code><code>#这样调用</code>
可得一个命令的结果
<code>#!/bin/bash</code>
<code> </code><code>commands=</code><code>ls</code><code>|</code><code>cat</code> <code>-n</code>
<code> </code><code>echo</code> <code>$commands </code><code>#输出为空</code>
<code> </code><code>commands=$(</code><code>ls</code><code>|</code><code>cat</code> <code>-n)</code>
<code> </code><code>#$commands #error</code>
<code> </code><code>echo</code> <code>$commands </code><code>#输出期望结果</code>
<code> </code><code>echo</code> <code>`$commands` </code><code>#error</code>
<code> </code><code>echo</code> <code>`</code><code>ls</code><code>|</code><code>cat</code> <code>-n` </code><code>#输出期望结果 反引用</code>
<code>###############################################</code>
<code>#子shell,在子shell操作,不影响主shell</code>
<code>echo</code> <code>`</code><code>pwd</code><code>`;</code>
<code>cd</code> <code>/bin</code>
<code># output#</code>
<code># /root/test</code>
<code># /bin</code>
<code>(</code><code>cd</code> <code>/bin</code><code>)</code>
评定一个算法的效率
<code>start=$(</code><code>date</code> <code>+%s) </code><code>#start=`date +%s`,等号不能有空格,如果有空格,会被变量当成命令</code>
<code>for</code> <code>(( i = 0; i < 100000; i++ ));</code><code>do</code>
<code> </code><code>echo</code><code>$i ></code><code>/dev/null</code>
<code>done</code>
<code>end=`</code><code>date</code> <code>+%s`</code>
<code>diff</code><code>=$(($end-$start))</code>
<code>echo</code> <code>"use times(ms):"</code><code>$</code><code>diff</code>
<code>echo</code> <code>"use times(ms):"</code><code>$(($end-$start))</code>
判断权限等,shell编程汇总功能常用
<code>#[[]] 必须有空格</code>
<code>#是否是文件,文件是否存在</code>
<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -f 1.txt ]]&& echo "1.txt is file" || echo "1.txt is notfile"</code>
<code>1.txt is </code><code>file</code>
<code>#是否是可执行文件</code>
<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -x 1.txt ]]&& echo "1.txt can be execute" || echo "1.txt can be execute"</code>
<code>1.txt can be execute</code>
<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -x 1.txt ]]&& echo "1.txt can be execute" || echo "1.txt can't be execute"</code>
<code>1.txt can't be execute</code>
<code> </code><code>[root@beijing </code><code>test</code><code>]</code><code># chmod +x 1.txt</code>
<code>1.txt can be execute</code>
<code>[root@beijing </code><code>test</code><code>]</code><code>#</code>
<code>#是否是目录</code>
<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -d 1.txt ]]&& echo "1.txt is dir" || echo "1.txt is't dir"</code>
<code>1.txt is't </code><code>dir</code>
<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -d /bin ]]&& echo "1.txt is dir" || echo "1.txt is't dir"</code>
<code>1.txt is </code><code>dir</code>
<code>#判断是空串吗?</code>
<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -z"1" ]] && echo "is null" || echo "is not null"</code>
<code>is not null</code>
<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -z"" ]] && echo "is null" || echo "is not null"</code>
<code>is null</code>
<code>-z 与-n功能相反</code>
小计
看书本,很简单的代码,也就是一看就懂的代码。其实真正自己写出来,在运行起来得到结果,也不容易。 眼高手低要不得。
我就在写程序是经常遇到一些这样情况。有时候要求有空格(比如条件判断时)。有时候不能有空格(变量赋值时)。有时候,单引号有时候又 反引号。哎要注意啊这些小细节,总结经验。
小小代码也不简单。
如果广大读者,也可以看着我的脑图,一步步写一下脚本,也会有所收获。
算个开篇吧。断断续续,随着学习深入,例子也会逐渐深入。希望自己的shell水平,能有所突破。