B Shell编程系列----脚本命令解析查询
转自:http://blog.csdn.net/s_k_yliu/article/details/7462982
http://blog.163.com/jk_new/blog/static/995485622010140363651/
Linux命令简单使用查询:??注意Shell中一些格式很重要,有些地方必须要加空格,否则无效!!!如if?[???],while?[??]??等
chmod--------修改文件的执行权限,
?chmod??u+x?????filename????只有自己可以执行,其它人不能执行?????chmod?700?filename
chmod??ug+x?????filename???只有自己以及同一群可以执行,其它人不能执行??chmod?770?filename
chmod??+x????????filename?所有人都可以执行???chmod?777?filename
echo---------输出变量名或者信息
echo???name???-----------输出结果,屏幕上显示name
name=TOM
echo??$name????----------输出结果,屏幕上显示TOM?,name经过上面的赋值
如果赋值的是系统环境变量,那么要加上export?变量,例如export?VE_BASE=/usr/local/arm/..????,可以添加到脚本
/root/.bashrc中?,使用source?.bashrc命令更新系统环境变量。
一些特殊的系统变量
$0-------------当前执行执行程序的名字,本身,但是并不是唯一的,因为脚本里面也可以包含另外的执行脚本。
$n-------------当前执行程序的第n个参数,注意:以空格为分隔符。
(其实上面的很好理解,echo?$0表示输出当前执行程序的名字,echo?$1?当前执行程序后面的第一个参数,echo?$2?.......)
$*?-------------这个程式的所有参数?
$#?-------------这个程式的参数个数?,这个只是个int类型的计数值,计算一共有多少个参数
$$?-------------这个程式的PID??
$@-------------为所有参数列表,返回所有参数
$!?-------------执行上一个背景指令的PID(?????)
$??-------------执行上一个指令的返回值(?????)
http://lovingtree.blog.163.com/blog/static/144853420082204505348/
exec----------执行另外的应用程序或者脚本,这个和直接运行不同的是,该命令会进入另外的脚本运行,并且直接关闭结束当前的脚本。
例如:#!/bin/sh
??????????echo?name
??????????exec?./filename
??????????echo?other?testing
那么,很明显的,后面的other?testing?就不会运行了。
pwd------?显示当前路径
expr------将数值加1
例如:?number=`expr?$number+1`?????,表示将自己加1
test?-----------流程控制,条件判断式。当后面的判断为真时,返回非0,判断不为真,那么返回0,一般都是配合if?--then?---else?----fi来使用
例如:name=jk
??????????if?(test?$name=jk)
??????????then????echo?right?$name
??????????else?????echo?not_right?name
???????????fi
结果输出:right?jk
?test?比较系列:主要是用于if?的判断,很简单,如果test满足条件为真,if后面才是非零值,那么才执行then程序,否则执行else或不执行。
特殊变量参数:
test?$#!=0????--------------比较当前的脚本所有参数是否为0,也即没有参数,那么(test??$#=0)就返回非零值,
数字比较:
$number=32
if(?test??$number?-eq?32)????---------------表示数字相等为真,注意,-eq前后保持空格
?expression1?-eqexpression2?相等为真
expression1-ne?expression2?不等为真
expression1?-gtexpression2?前>后为真??
expression1?-geexpression2?前>=后为真
expression1-ltexpression2?前<后为真
expression1-leexpression2?前<=后为真
字符串比较:
if?(?test??$string1?=?$string2??)??--------------比较两个字符串是否相等,注意了,比较的两个字符串中间=号都要加上一个空格,否则比较无效,返回都是真。
同理:?if(test?$string1?!=?$string2?)???------不等于才为真,注意‘=’号两边的空格一定要加上。
????????????if(test?$string1?=?"abc")???-----直接比较字符串
???????????if(test??-z?$string???)------查看字符串长度是否为0
文件存在比较:
?if(?test??-d??$filename)?????--------------查看filename是存在的一个文件子目录为真
if(test?-e??$filename)??????----------------查看filename文件存在为真
if(test?-f?file)??????----------------文件是普通文件为真
if(test?-g?file?)??????----------------文件的set-group-id属性位被设置则为真
if(test?-r?file?)??????----------------文件可读则为真
if(test?-s?file?)??????----------------文件长度不为0则为真
if(test?-u?file?)??????----------------文件的set-user-id属性位被设置则为真
if(test?-w?file?)??????----------------文件可写则为真
if(test?-x?file?)??????----------------文件可执行则为真
?for?in?语法命令:
for???变量in?循环给予变量;do???\
command(该命令中会包含了上面的变量)
done;
从上面可以看出:这句话的意思就是,for?后面跟了一个使用的变量,?该变量根据for循环,分别从in?后面的循环变量中获取变量,然后在do里面,将获取的变量一次执行某个命令,一直都循环给予变量结束;
举例:
for??testvar???in??aa?bb?cc?dd;?do??\
echo?$testvar?
done;
好,看到的结果就是:aa??bb??cc?dd?.
其中有个注意点:不要写成:for???testvar??????
?????????????????????????????????????????????in??aa?bb?cc?dd;?do?\?
????????????????????????????????????????????也即不要将for?和In隔行,一定要保证在同一行中才行,否则出错;
?while循环命令:
如同上面的for一样,while的格式如下:
while?条件表?
do?
命令表?
done?
条件表就是用到上面的test条件判断,和if一样,举例说明:
Sum=0?
i=0?
while?true??????????????????????#true是系统的关键词?表示真?
do?
i=`expr?$i?+?1`?
Sum=`expr?$Sum?+?$i`?
if?[?$i?=?"100"?]?
then?
break;?
fi?
done?????????????????--------这里到while结束
echo?$i?$Sum?
其实while部分可以改为:
while?[?$i?!=?"100"?]?
do?
i=`expr?$i?+?1`?
Sum=`expr?$Sum?+?$i`?
done?
?case?命令:
??
?read?命令:
?
?
?linux?shell获取本机ip地址
(2009-02-12?09:57:11)?
转载
var?$tag='杂谈';?var?$tag_code='b02ecd6f2bb60521b827eb9d873b00cd';?var?$r_quote_bligid='4a4163880100cil2';?var?$worldcup='0';?var?$worldcupball='0';?标签:
杂谈分类:shell编程
获取本机ip地址地址,并保存到变量中
arg=`ifconfig?eth0?|grep?"inet?addr"|?cut?-f?2?-d?":"|cut?-f?1?-d?"?"`
ipaddr=$arg
echo?$ipadd
来源:(http://blog.sina.com.cn/s/blog_4a4163880100cil2.html)?-?linux?shell获取本机ip地址_nike_新浪博客
?
cut参数简介
-d用来定义分隔符,默认为tab键,
-f表示需要取得哪个字段,2表示取得以-d指定的分隔符分割的第二个字段
当然也可以通过cut取得文件中每行中特定的几个字符,例如:
cut?-c3-5?/etc/passwd
就是输出/etc/passwd文件中每行的第三到第五个字符。
-c?和?-f?参数可以跟以下子参数:
N?第N个字符或字段
N-?从第一个字符或字段到文件结束
N-M?从第N个到第M个字符或字段
-M?从第一个到第M个字符或字段
补充:
文件状态测试
-b?filename?:?当filename?存在并且是块文件时返回真(返回0)
-c?filename?:?当filename?存在并且是字符文件时返回真
-d?pathname?:?当pathname?存在并且是一个目录时返回真
-e?pathname?:?当由pathname?指定的文件或目录存在时返回真
-f?filename?:?当filename?存在并且是正规文件时返回真
-g?pathname?:?当由pathname?指定的文件或目录存在并且设置了SGID?位时返回真
-h?filename?:?当filename?存在并且是符号链接文件时返回真?(或?-L?filename)
-k?pathname?:?当由pathname?指定的文件或目录存在并且设置了"粘滞"位时返回真
-p?filename?:?当filename?存在并且是命名管道时返回真
-r?pathname?:?当由pathname?指定的文件或目录存在并且可读时返回真
-s?filename?:?当filename?存在并且文件大小大于0?时返回真
-S?filename?:?当filename?存在并且是socket?时返回真
-t?fd???????:?当fd?是与终端设备相关联的文件描述符时返回真
-u?pathname?:?当由pathname?指定的文件或目录存在并且设置了SUID?位时返回真
-w?pathname?:?当由pathname?指定的文件或目录存在并且可写时返回真
-x?pathname?:?当由pathname?指定的文件或目录存在并且可执行时返回真
-O?pathname?:?当由pathname?存在并且被当前进程的有效用户id?的用户拥有时返回真(字母O?大写)
-G?pathname?:?当由pathname?存在并且属于当前进程的有效用户id?的用户的用户组时返回真
file1?-nt?file2?:?file1?比file2?新时返回真
file1?-ot?file2?:?file1?比file2?旧时返回真
举例:?if?[?-b?/dev/hda?]?;then?echo?"yes"?;else?echo?"no";fi?//?将打印?yes
test?-c?/dev/hda?;?echo?$??//?将打印?1?表示test?命令的返回值为1,/dev/hda?不是字符设备
[?-w?/etc/passwd?];?echo?$??//?查看对当前用户而言,passwd?文件是否可写
?
测试时逻辑操作符
-a?逻辑与,操作符两边均为真,结果为真,否则为假。
-o?逻辑或,操作符两边一边为真,结果为真,否则为假。
!??逻辑否,条件为假,结果为真。
举例:?[?-w?result.txt?-a?-w?score.txt?]?;echo?$??//?测试两个文件是否均可写
?
常见字符串测试
-z?string????:?字符串string?为空串(长度为0)时返回真
-n?string????:?字符串string?为非空串时返回真
str1?=?str2??:?字符串str1?和字符串str2?相等时返回真
str1?!=?str2?:?字符串str1?和字符串str2?不相等时返回真
str1?<?str2??:?按字典顺序排序,字符串str1?在字符串str2?之前
str1?>?str2??:?按字典顺序排序,字符串str1?在字符串str2?之后
举例:?name="zqf";?[?$name?=?"zqf"?];echo?$??//?打印?0?表示变量name?的值和字符串"zqf"相等
?
常见数值测试
int1?-eq?int2?:?如果int1?等于int2,则返回真
int1?-ne?int2?:?如果int1?不等于int2,则返回真
int1?-lt?int2?:?如果int1?小于int2,则返回真
int1?-le?int2?:?如果int1?小于等于int2,则返回真
int1?-gt?int2?:?如果int1?大于int2,则返回真
int1?-ge?int2?:?如果int1?大于等于int2,则返回真
举例:?x=1?;?[?$x?-eq?1?]?;?echo?$??//?将打印?0?表示变量x?的值等于数字1
x=a?;?[?$x?-eq?"1"?]?//?shell?打印错误信息?[:?a:?integer?expression?expected