码迷,mamicode.com
首页 > 系统相关 > 详细

shell-1

时间:2016-08-02 17:12:57      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:运算

文件比较运算符

-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]

-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]

-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]

-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]

-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]

-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]

-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]


字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)

-z string 如果 string 长度为零,则为真 [ -z "$myvar" ]

-n string 如果 string 长度非零,则为真 [ -n "$myvar" ]

string1= string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]

string1!= string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]

算术比较运算符

num1-eq num2 等于 [ 3 -eq $mynum ]

num1-ne num2 不等于 [ 3 -ne $mynum ]

num1-lt num2 小于 [ 3 -lt $mynum ]

num1-le num2 小于或等于 [ 3 -le $mynum ]

num1-gt num2 大于 [ 3 -gt $mynum ]

num1-ge num2 大于或等于 [ 3 -ge $mynum ]


if [ "$myvar" -eq 3 ]

then

echo "myvar equals 3"

fi

if [ "$myvar" = "3" ]

then

echo "myvar equals 3"

fi

上面两个比较执行相同的功能,但是第一个使用算术比较运算符,而第二个使用字符串比较运算符

请记住,如果养成将所有字符串自变量用双引号括起的习惯,将除去很多类似的编程错误


只要特定条件为真,"while" 语句就会执行,其格式如下:

while [ condition ]

do

statements

done


通常使用 "While" 语句来循环一定次数,比如,下例将循环 10 次:

myvar=

while [ $myvar -ne 10 ]

do

echo $myvar

myvar=$(( $myvar + 1 ))

done


"Until" 语句提供了与 "while" 语句相反的功能:只要特定条件为 假 ,它们就重复。下面是一个与前面的

"while" 循环具有同等功能的 "until" 循环:

myvar=

until [ $myvar -eq 10 ]

do

echo $myvar

myvar=$(( $myvar + 1 ))

done




case "${x##*.}" in

gz)

gzunpack ${SROOT}/${x}

;;

bz2)

bz2unpack ${SROOT}/${x}

;;

*)

echo "Archive format not recognized."

exit

;;

esac

在上例中,bash 首先扩展 "${x##*.}"。在代码中,"$x" 是文件的名称,"${x##.*}" 除去文件中最

后句点后文本之外的所有文本。然后,bash 将产生的字符串与 ")" 左边列出的值做比较。在本例中,

"${x##.*}" 先与 "gz" 比较,然后是 "bz2",最后是 "*"。如果 "${x##.*}" 与这些字符串或模式中

的任何一个匹配,则执行紧接 ")" 之后的行,直到 ";;" 为止,然后 bash 继续执行结束符 "esac" 之后

的行。如果不匹配任何模式或字符串,则不执行任何代码行,在这个特殊的代码片段中,至少要执行一个代

码块,因为任何不与 "gz" 或 "bz2" 匹配的字符串都将与 "*" 模式匹配。


$0 这个程序的执行名字

$n 这个程序的第 n 个参数值,n=

$* 这个程序的所有参数

$# 这个程序的参数个数

$$ 这个程序的 PID

$! 执行上一个背景指令的 PID

$? 上一个指令的返回值


CODE:

%x=

%echo "${x%w*w}"

aabbaarealwwvv

%echo "${x%%w*w}"

aabbaareal

%echo "${x##a*a}"

lwwvvww

%echo "${x#a*a}"

bbaarealwwvvww

其中 , # 表示掐头, 因为键盘上 # 在 $ 的左面。

其中 , % 表示%, 因为键盘上 % 在 $ 的右面。

单个的表示最小匹配,双个表示最大匹配。

也就是说,当匹配的有多种方案的时候,选择匹配的最大长度还是最小长度。


shell-1

标签:运算

原文地址:http://21024.blog.51cto.com/11024/1833581

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!