潜心静气。。慢慢出成果
全部博文(37)
分类: LINUX
2015-04-27 20:59:49
前一段时间一直在搞二维码生成器,在linux字符输入下比如输入 qrencode “$$$$$$$$$$$$” “121” “323” 则显示的是 474474474474474474474$ 于是就加以探究,后来第二天再次调试发现同样输入 echo “$$$$$” 输出为1163111631$。
当开机重启后再次输入发现又改变为3597359735973597 这就是说两个美元符号在一起时被linux shell脚本解释器解释为数字,而且数字随着每次开机的环境参数不同而是随机的。
后来有做猜测会不会跟那个参数有关呢?于是就抱着好奇心探究会不会跟父子进程号有关,当输入ps 后,眼前一亮
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 R 0 3769 3597 0 80 0 - 1475 - pts/2 00:00:00 ps
果然linux字符下$$ 表示的是当前进程的父进程号。
解决办法就是别输入这样的字符,输入的地方加上单引号echo “lslsllsls’$$$$$$’lllllllslslslls”
而且我们使用二维码生成器为上层,就不会出现这个问题了呀。
后来抱着继续探究的心理继续探究,试了QQ二维码扫描和微信二维码扫描,发现微信的没有这个bug 而qq有这个bug。希望我们可爱的小马哥继续改进啦。。
而\\转义字符只能显示一个,所以如果遇到在linux下命令行操作刚好出现这个问题的朋友可以参考下。产生原因:是因为linux默认”\\”为一个”\”。
解决办法:当然书输入双倍的\\\\了这样就是显示结果就是” \\”
或者如上加上单引号就可以解决问题了。但是只能是单引号输入。Echo ‘$$$’
不能是 echo “’$$$$$$’llllll” 这样是依然把单引号当成了单引号。
来略加思考决定将linux 下shell特殊字符给总结加强下。
所谓shell 就是linux下用户命令输入解释器。请注意是用户输入解释器。小可有个疑问如果是如果我执行的是应用程序,那么该怎么解释呢?
我们使用的是命令行执行应用程序当然是需要shell脚本解释器解释给内核,至于应用程序实现过程,不再参与解释。
特殊字符如下:
* 玩过linux的肯定都知道这是通配符 如F* 表示所有以F开头的文件(linux下一切皆文件)
而与之对应的是?表示是一个任何字符 就是只能表示一个字符的通配符,* 表示的长短不定,?只能表示一个。
‘’单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释,所以单引号也是个特殊的字符。
而我们使用的双引号除了部分特殊字符可以保持特殊功能外,其余的字符都是普通字符了。
$ \ 和`
反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,作为命令使用。
#! /bin/bash
string=”current directory is `pwd`”
echo $string
current directour is /home/xyz
shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替换后的整个结果。
我们探究makefile与脚本的区别。仔细思考后发现makefile不是脚本。而是automake的文件。Makefile下执行命令的$(pwd)是不一样的。
Linux下系统启动后一般会打开三个文件,标准输入,stdin 标准输出 stdout 标准错误 stderr
通常前两者都是直接在显示屏上。标准错误则是输出到文件
用于输入/输出重定向与管道的<;、>;、<<;、>>;和|;执行后台命令的&;;命令执行操作符&&;和||
输出定向 >输出加重定向 >>
输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。
可以利用echo来测试
Touch file1
echo kkkkkkk >file1
显示结果是KKKKKKK
追加就是不覆盖在后边加上
输入<重定向和输入追加重定向<<追加就是不覆盖在后边加上
| 为管道命令。即为前者的输出是后者的输入
Ls –al |grep f*
就是查看所有的f开头的文件。
而& 后台执行就是不打印到前台显示屏。
逻辑执行的&& 与||
就是&& 逻辑或 只要有一个为1 就可以往下执行。
|| 逻辑与就是只有两个都为1才往下执行的.
这个大家很容易看明白的。
同时解释下命令替换和重定向的区别:
$ cd `pwd`=======文件脚本中往往先执行``。
该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。