Chinaunix首页 | 论坛 | 博客
  • 博客访问: 172340
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-23 21:00
个人简介

潜心静气。。慢慢出成果

文章分类

全部博文(37)

文章存档

2018年(5)

2017年(6)

2016年(23)

2015年(3)

我的朋友

分类: 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命令的参数,结果仍然是停留在当前目录下。

 

阅读(5857) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~