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 -eq expression2 相等 为真
expression1-ne  expression2 不等 为真
expression1 -gt expression2 前>后 为真  
expression1 -ge expression2 前>=后 为真
expression1-lt expression2 前<后 为真
expression1-le expression2 前<= 后为真

字符串比较:

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) 
B Shell编程系列----脚本命令解析查询 - jimk - jimk的博客 转载

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

猜你喜欢

转载自eblddong.iteye.com/blog/1602015
B
a^b
今日推荐