随笔分类 - shell
在学习shell的过程中总结积累的一些错误
摘要:第一种方法:ifconfig|grep inet |awk '{print $2}'|sed '2d'|awk -F : '{print $2}'第二种方法:ifconfig|grep inet|sed -n '1p' |awk '{print $2}'|awk -F : '{print $2}'第三种方法:ifconfig|grep "inet addr"|grep -v "127.0.0"|awk -F":" '{print $
阅读全文
摘要:shell编程中使用到得if语句内判断参数 –b当file存在并且是块文件时返回真 -c当file存在并且是字符文件时返回真 -d当pathname存在并且是一个目录时返回真 -e当pathname指定的文件或目录存在时返回真 -f当file存在并且是正规文件时返回真 -g当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 -k当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真 -p当file存在并且是命令管道时返回为真 -r当由pathname指定的文件或目录存在...
阅读全文
摘要:getopts是一条获取和处理命令行选项的语句,格式为getoptsoption_stringvariable.其中option_string中包含一个有效的单字符选项,若getopts命令在命令行中发现了连字符,那么它将用连字符后面的字符同option_string相比较。若有匹配,则把变量variable的值设为该选项。若无匹配,则variable设为?。当getopts发现连字符后面没有字符,会返回一个非零的状态值。Shell程序中可以利用getopts的返回值建立一个循环。有时侯选项中还带一个值,getopts命令同样也支持这一功能。这时需要在option_string中选项字母后加一
阅读全文
摘要:检查语法-n选项只做语法检查,而不执行脚本。sh-nscript_name.sh启动调试sh-xscript_name.s进入调试模式后,Shell依次执行读入的语句,产生的输出中有的带加号,有的不带,如下。带加号表示该条语句是Shell执行的。不带加号表示该语句是Shell产生的输出。+array=(12345)+foriin'${array[*]}'+echo11加上-v可将源码一起输出中断调试在调试过程中可以按Ctrl+Z中断调试,观察结果,然后再按fg键继续调试即可。调试代码块上面的-x选项是调试整个脚本的,如果脚本很大,会很不方便,还有一种方法是调试某一块代码的,如下
阅读全文
摘要:1、多行变成单行-bash-3.2#cattest.txtabcdefgopq-bash-3.2#cattest.txt|xargsabcdefgopq2、单行变成多行-bash-3.2#cattest.txtabcdefgopq-bash-3.2#cattest.txt|xargs-n2abcdefgopq3、删除某个重复的字符来做定界符-bash-3.2#cattest.txtAaaagttttgyyyygcccc-bash-3.2#cattest.txt|xargs-dgaaaattttyyyycccc4、删除某个重复的字符来做定界符后,变成多行-bash-3.2#cattest.txt
阅读全文
摘要:一、变量1、linux大小写敏感,变量取名要注意大小写。可以通过变量名前面加$来访问变量的内容。可以通过使用read命令来将用户输入的值赋给一个变量。2、给变量赋值时,如果字符串中包含空格,就必须用引号把他们引起了,还要注意在等号两边不能有空格。3、变量在双引号中会用变量值替换,而在单引号中就不会替换,也可以通过转义字符\来取消$的特殊含义。例:myvar=“Hithere!”echo$myvarecho"$myvar"echo'$myvar'echo\$myvar将会输出如下:Hithere!Hithere!$myvar$myvar4、环境变量:环境变量通
阅读全文
摘要:1、使用getopts从命令行接收参数例:whilegetoptsh:u:p:OPTIONdocase$OPTIONinh)echo"主机地址:$OPTARG";;u)echo"用户名:$OPTARG";;p)echo"密码:$OPTARG";;\?)echo"无效的选项";;esacdonegetopts的选项后可以有冒号也可以没有,有冒号的选项表示在输入时选项后有值,值存在变量$OPTARG中,没有冒号表示不跟值。2、获取某段时间内的月份列表startdate=$1enddate=$2datecode=$sta
阅读全文
摘要:文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:echo-e"\033[44;37;5mME\033[0mCOOL"以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符“ME”,然后重新设置屏幕到缺省设置,输出字符“COOL”。“e”是命令echo的一个可选项,它用于激活特殊字符的解析器。“\033”引导非常规字符序列。“m”意味着设置属性然后结束非常规字符序列,这个例子里真正有效的字符是“44;37;5”和“0”。修改“44;37;5”可以生成不同颜色的组合,数值和编码的前后顺序没有关系。可以选择的编码如下所示:编码颜色/动作0重新设置属性到缺省设置1设置
阅读全文
摘要:在一些Shell脚本中,特别是Crontab的脚本中,经常会看到>/dev/null2>&1这样的写法。其实这个很好理解。我们分两部分解释。1. >/dev/null大家知“>”(右尖括号)在unix/linuxshell中表示输入到的意思,就是把”>”左边的内容输入到”>”右边。比如:echotext>1.txt就把“text”这个文本输入到1.txt这个文件中。那么“/dev/null”又是个什么东东呢?它代表一个空设备,即不存在的设备。也就是说,抛弃”>”左边的内容,不进行输出。2. 2>&1这个其实是三个部分组成的:
阅读全文
摘要:在匹配字符串时用了类似这样的语句if[$timeofday="yes"];thenecho"Goodmorning"exit0报错的原因是:如果变量timeofday的值为空,那么就if语句就变成了if[="yes"],这不是一个合法的条件。为了避免出现这种情况,我们必须给变量加上引号if["$timeofdat"="yes"],这样即使是空变量也提供了合法的测试条件,,if[""="yes"]
阅读全文
摘要:有时候shell在运行的时候可能会报toomanyarguments错误,出现这种错误的一般情况是出现了多值问题,也就是一个变量可能有多个值了。例:#!/bin/shecho"Isitmorning?Pleaseansweryesorno"readtimeofdayif[$timeofday="yes"];thenecho"Goodmorning"elif[$timeofday="no"];thenecho"Goodafternoon"elseecho"Sorry,$timeofday
阅读全文
摘要:cygwin下面写shell,运行出错:syntax error near unexpected token `$’do\r”MicrosoftInternetExplorer402DocumentNotSpecified7.8Web0写shell,运行出错:syntaxerrornearunexpectedtoken`$’do\r”【问题】在cygwin下,用notepad++写了个简单的shell脚本,内容如下:12345678910111213#!/bin/bash#remove*.bakinsubfolderfilesecho'remove*.bak'sub_folde
阅读全文
摘要:出现badinterpreter:Nosuchfileordirectory的原因是文件格式的问题。这个文件是在Windows下编写的。换行的方式与Unix不一样,但是在VI下面如果不Set一下又完全看不出来。解决方法:1、上传到linux主机运行chmod+xback./back错误提示如下:bash:./back:badinterpreter:Nosuchfileordirectory2、错误分析:因为操作系统是windows,在windows下编辑的脚本,所以有可能有不可见字符。从你的脚本及报告的错误看来,很有可能是你的脚本文件是DOS格式的,即每一行的行尾以\r\n来标识,其ASCII
阅读全文