bash shell中测试命令

bash shell中测试命令

bash shell中测试命令,bashshell测试命令

bash shell中测试命令

    test指令提供了ifthan语句中测试分裂条件的路径。如若test命令中列出的基准建立,test指令就会退出并赶回退出状态吗0
。那样ifthan言辞就与别的编制程序语言中的ifthan语句看似的措施行事了。假若条件不成立,test一声令下就会脱离并重临非零的退出状态码,使得ifthan语句不会被实施。

1    test 命令的着力格式

    test        condition

        conditiontest命令要测试的一两种参数和值。

2用在if-than语句中,格式是那样的:

        if     test     condition

        then

            commands

        fi

    如若不写condition有的,它会以非零的退出状态码退出。then
语句块不会被实施,并实施else语句块。

[[email protected] data]# cat test6.sh
#!/bin/bash
#
if    test
then
    echo "No expressing returns a Ture"
else
    echo "No expressing returens a False"
fi

[[email protected]
data]# bash test6.sh

    “No expressing returens a False”

3 bash shell 的另一种常用的测试条件

    if    [    condition        ]

    then

        commands

    fi

    方括号定义了测试条件。

    test指令能够判断三类标准:

    (1)数值比较

    (2)字符串相比

    (3)文件比较

只顾:方括号过后和第二个方括号在此之前必须抬高一个空格,不然会报错。

4    数值相比

    下表列出了测试七个值时可用的尺码参数

比较

描述

n1 –eq n2

检查n1是否等于n2

n1 –ge n2

检查n1是否大于或等于n2

n1 –gt n2

检查n1是否大于n2

n1 –le n2

检查是否小于等于n2

n1 –lt n2

检查n1是否小于n2

n1 –ne n2

检查n1是否不等于n2

只顾:测试命令中只好处理整数

[[email protected] data]# cat number_test.sh
#!/bin/bash
value1=10 #定义变量value1、value2
value2=11
if [ $value1 -gt 5 ]    #测试value1的值是否大于5
then
    echo "The test value $value1 is greater than 5"
fi
if [ $value1 -eq $value2 ]        #测试value1的值是否和变量value2的值相等。
then
    echo "The values are equal"
else
    echo "The values are different"
fi

[[email protected]
data]# bash number_test.sh

The test value 10 is greater than 5

The values are different

5    字符串比较

    条件测试运维字符串相比较,下表列出了字符串附加测试

比较

描述

str1 = str2

检查str1是否和str2 相同

str1 != str2

检查str1是否和str2不同

str1 < str2

检查str1 是否比str2小

str1 > str2

检查str1 是否比str2大

n str1

检查str1的长度是否非0

z str1

检查str1的长度是否为0

    要测试3个字符串是不是比另2个字符串大是贰个麻烦的题材,重要有刹那间三个难题:

(1)大于号和小于号必须转义,不然SHELL会把它们作为重定向符号,把字符串值当作文件名;

(2)大于和小于顺序和sort一声令下所使用的分裂。

在字符串比较测试中,大写字母被认为是过量小写字母的;相比较测试中运用的是明媒正娶的ASCII各种,依据种种字符的ASCII数值来控制排序结果。

[[email protected] data]# cat str_comparison.sh
#!/bin/bash
var1=baseball
var2=hockey
if [ $var1 \> $var2 ]
then
    echo "$var1 is greater than $var2"
else
    echo "$var1 is lees than $var2"
fi

[[email protected]
data]# bash str_comparison.sh

baseball is lees than hockey

6    文件比较

    测试Linux上文件系统上文件和目录的场馆。

比较

描述

d file

检查file 是否存在并是一个目录

e file

检查file是否存在

f file

检查file是否存在并是一个文件

r file

检查file是否存在并可读

s file

检查file是否存在并非空

w file

检查file是否存在并可写

x file

检查file是否存在并可执行

O file

检查file是否并属当前用户所有

G file

检查file 是否存在且默认组与当前用户相同

file1 –nt file2

检查file1是否比file2新

file1 –ot file2

检查file1是否比file2旧

[[email protected]]# cattestfile_exist.sh
#!/bin/bash
item_name=$HOME
echo
echo "The item being checked:$item_name"
echo
if [ -e $item_name ]
then #item_name does exist
    echo "The item,$item_name,does exist"
    echo "But is it a file?"
    echo
if [ -f $item_name ]
then #item_name is a file
    echo "Yes,$item_name is a file"
else #item_name is not a file
    echo "No,$item_name is not a file"
fi
else #item_name does not exist
    echo "The item,$item_name, does not exist"
    echo "Nothing to update"
fi

[[email protected]
data]# bash testfile_exist.sh

The item being checked:/root

The item,/root,does exist

But is it a file?

No,/root is not a file

7    复合条件测试

ifthan语句中能够使用布尔逻辑来构成测试

(1) [ condition1 ] && [ condition2 ]

(2) [ conditon1 ] || [ conditon2 ]

    第③种布尔运算使用AND布尔运算符来组合三个原则。要让then一对的吩咐执行,七个标准化必须都满意。

    第壹种布尔运算使用OR布尔运算符来组合八个原则。就算任意条件为TRUEthen一对的吩咐就会实施。

[root@localdata]# catcompund_comparison.sh

#!/bin/bash

#

if [ -d $HOME ] && [ -w $HOME/testing ]

then

    echo “The file exists and you can write to it”

else

    echo “I can not write to the file”

fi

[[email protected]
data]# bash compund_comparison.sh

I can not write to the file

    第二个相比会检查用户的$HOME目录是不是留存。第③个相比会检讨在用户的$HOME目录下是不是有个名叫testing的文件,以及用户是或不是有该公文的写入权限。假诺五个比较中有3个受挫了,if话语就会失利,shell就会执行else的部分。即便三个条件都因而了,则if言语通过,shell会执行then一对的一声令下。

shell中测试命令,bashshell测试命令 bash
shell中测试命令 test 命令提供了 if – than 语句中测试区别口径的途径。尽管test 命令中列出的标准…

洋洋程序在脚本命令之间需求某种逻辑流控制,允许脚本依照变量值的标准化还是其余命令的结果路过一些指令也许循环执行这一个命令。那个命令平常被喻为结构化命令。和任何高档程序设计语言同样,shell提供了用来决定程序执行流程的授命,包含条件分支和循环结构,用户能够用那么些命令建立相当复杂的先后。与守旧的语言区别的是,shell用于钦点条件值的不是布尔表明式而是命令和字符串。

    test指令提供了ifthan语句中测试分歧标准的门路。如若test命令中列出的准绳建立,test命令就会脱离并再次回到退出状态吗0
。那样ifthan言语就与别的编制程序语言中的ifthan语句看似的主意行事了。即便基准不创立,test一声令下就会脱离并重返非零的退出状态码,使得ifthan语句不会被实践。

    test指令提供了ifthan语句中测试区别规格的不二法门。固然test一声令下中列出的规格建立,test一声令下就会脱离并回到退出状态吗0
。这样ifthan言辞就与其余编程语言中的ifthan语句看似的点子工作了。尽管基准不树立,test一声令下就会退出并回到非零的退出状态码,使得ifthan语句不会被实践。

 

1    test 命令的中央格式

1    test 命令的主旨格式

分段条件

    test        condition

    test        condition

 

        conditiontest指令要测试的一名目繁多参数和值。

        conditiontest指令要测试的一多元参数和值。

Linux 提供 $?
特殊变量来保存最终一条命令执行完毕的脱离状态。假如想核对一条命令的退出状态,必须在那条命令运转成功后当即查看或使用变量
$?。一条命令成功做到的退出状态是
0,假如命令执行错误,那么退出状态就会是3个正整数。

2用在if-than语句中,格式是这么的:

2用在if-than语句中,格式是那样的:

Linux退出状态代码

        if     test
    condition

        if     test
    condition

代码      描述

        then

        then

0     命令成功达成

            commands

            commands

1     平常的不解错误

        fi

        fi

2     误用 shell 命令

    若是不写condition有个别,它会以非零的退出状态码退出。then
语句块不会被实施,并推行else语句块。

    若是不写condition有个别,它会以非零的退出状态码退出。then
语句块不会被实践,并履行else语句块。

126     命令无法推行

[root@local data]# cat test6.sh
#!/bin/bash
#
if    test
then
    echo "No expressing returns a Ture"
else
    echo "No expressing returens a False"
fi
[root@local data]# cat test6.sh
#!/bin/bash
#
if    test
then
    echo "No expressing returns a Ture"
else
    echo "No expressing returens a False"
fi

127     没有找到命令

[root@local data]# bash test6.sh

[root@local data]# bash test6.sh

128     无效的脱离参数

    “No expressing returens a False”

    “No expressing returens a False”

128+x   Linux 信号 x 的造成错误

3 bash shell 的另一种常用的测试条件

3 bash shell 的另一种常用的测试条件

255     规范外的脱离状态

    if    [    condition        ]

    if    [    condition        ]

 

    then

    then

 

        commands

        commandsbashshell测试命令,语法之结构化命令。

if-then语句

在其它编制程序语言中,if 语句前边的对象是二个值为 TRUE 或 FALSE 的等式。
bash shell脚本中的 if 语句不是这么的。 bash shell 中的 if 语句运转在 if
行定义的命令。假任务令的脱离状态是0(成功执行命令),将执行 then
前面包车型客车享有命令。假诺命令的淡出状态是0以外的别的值,那么then后边的授命将不会实施,
bash shell 会移动到剧本的下一条命令。

 

格式:

  if command

  then

       commands

  fi

 

示例

#!/bin/bash
#  testing multiple commands in the then section
testuser=rich
if grep $testuser /etc/passwd
then
  echo The bash files for user $testuser are :
  ls -a /home/$testuser/.b*
fi

留神:在部分剧本中,恐怕会看出 if-then
语句的另一种方式:

if command; then

  commands

fi

在计值的命令末尾使用二个支行,可以将 then
语句包括在此行中,那更像是在别的一些编制程序语言中处理 if-then
语句的不二法门。

 

    fi

    fi

if-then-else

格式:

if command

then

    commands

else

    commands

fi

示例 

#!/bin/bash
#testing multiple commands in the then section
testuser=rich
if grep $testuser /etc/passwd
then
  echo The bash files for user $testuser are:
  ls -a /home/$testuser/.b*
else
  echo “The user name $testuser doesn’t exist on this system”
fi

 

    方括号定义了测试条件。

    方括号定义了测试条件。

嵌套 if 语句

格式:

if command1

then

  commands

elif  command2

then

  more commands

fi

示例

#!/bin/bash

# looking for a possible value

 

if [ $USER = “rich” ]

then

  echo “Welcome $USER”

  echo “Please enjoy your visit”

elif [ $USER = barbara ]

then

  echo “Special testing account” 

else

  echo “Sorry, you’re not allowed here” 

fi

 

 

    test指令能够判定三类标准:

    test命令能够判断三类标准:

test命令

test命令提供一种检查和测试 if-then
语句中分裂尺度的办法。借使test命令中的条件评估值为true,test命令以0退出状态代码退出,如果条件为false,则test命令退出。

 

test 命令格式:

  test condition

condition 是一多级 test命令评估的参数和值。

 

在 if-then 语句中运用时,test命令如下所示:

if test condition

then

  commands

fi

 

bash shell 提供一种在 if-then 语句中宣示 test 命令的另一种方法:

if [ condition ]

then

   commands

fi

方括号定义在 test
命令中央银行使的原则。注意,在前半个方括号的末端和后半个方括号的前边必须都有二个空格,否则会拿走错误消息。

 

test 命令能够评估以下3类条件:

(1)数值比较:

  • n1 -eq n2:检查 n1 是否等于 n2
  • n1 -ge n2:检查 n1 是或不是超出或等于 n2
  • n1 -gt n2:检查 n1 是否超过 n2
  • n1 -le n2: 检查 n1 是还是不是低于或等于 n2
  • n1 -lt n2: 检查 n1 是或不是低于 n2
  • n1 -ne n2:检查 n1 是还是不是不对等 n2

示例

#!/bin/bash

# testing floating point numbers

val1=` echo “scale=4; 10 / 3 ” | bc`

echo “The test value is $val1”

if [ $val1 -gt 3 ]

then

   echo “The result is larger than 3”

fi

只顾:test 命令不恐怕处理存款和储蓄在变量 val1 中的浮点值。

(2)字符串相比较:

  • str1 = str2:检查 str1 与 str2 是还是不是同样
  • str1 != str2:检查 str1 与 str2 是或不是差异
  • str1 < str2:检查 str1 是否低于 str2
  • str1 > str2: 检查 str1 是还是不是超过 str2
  • -n str1:检查 str1 的长短是或不是大于0
  • -z str1:检查 str1 的尺寸是或不是为0

字符串相等

示例

#!/bin/bash

# testing string equality

testuser=rich

 

if [ $USER = $testuser ]

then

   echo “Welcom $ testuser”

fi

 

字符串顺序

胜出和小于符号一定要转义,不然 shell
会将它们当做重定向符号,将字符串值看作文件名。

超出和小于顺序与在 sort 命令中的顺序不相同。

示例

#!/bin/bash

# mis-using string comparisons

 

var1=baseball

var2=hockkey

 

if [ $val1 > $ val2 ]

then

   echo “$val1 is greater than $var2”

else

   echo “$val1 is less than $var2”

fi

 

字符串大小

示例

#!/bin/bash

# testing string length

val1=testing

val2=”

 

if [ -n $val1 ]

then

   echo “The string ‘$val1’ is not empty”

else

   echo “The string ‘$val1’ is empty”

fi

 

if [ -z $val2 ]

then

   echo “The string ‘$val2’ is not empty”

else

   echo “The string ‘$val2’ is empty”

fi

 

if [ -z $val3 ]

then

   echo “The string ‘$val3’ is not empty”

else

   echo “The string ‘$val3’ is empty”

fi

空变量和尚未早先化的变量长度为0。

 

(3)文件相比较:

  • -d 文件名:  假设文件存在且为目录则为真
  • -e 文件名:   假若文件存在则为真
  • -f 文件名:  如果文件存在且为普通文书则为真
  • -r 文件名: 假设文件存在且可读则为真
  • -s 文件名:  若是文件存在且至少有3个字符则为真
  • -w 文件名:  要是文件存在且可写则为真
  • -x 文件名:  即使文件存在且可实施则为真
  • -o file : 检查 file 是不是存在并且被眼下用户全数
  • -G file:检查 file 是或不是留存并且默许组是否为当下用户组
  • -c 文件名:  假如文件存在且为字符型特殊文件则为真
  • -b 文件名:  要是文件存在且为块优异文件则为真
  • file1 -ot file2 若 file 旧于 file2,则条件建立

 

示例 

 #!/bin/bash

# check if a file

if [ -e $HOME ]

then 

   echo “The object exists, is it a file?”

   if [ -f $HOME]

   then

     echo “Yes, it’s a file!”

   else

     echo “No, it’s not a file!”

     if [ -f $HOME/.bash_history]

     then

       echo “But this is a file!”

     fi

  fi

else

   echo “Sorry, the object doesn’t exists”

fi

    (1)数值相比较

    (1)数值比较

 

    (2)字符串相比较

    (2)字符串比较

复合条件检查 

  [ condition1 ] && [ condition2 ]

八个条件必须都满足才能进行 then 部分

  [ condition1 ] || [ condition2 ] 

只要任意二个口径评估为 true,那么就会实施 then 部分

示例

#!/bin/sh 
mailfolder=/var/spool/mail/james 
[ -r "$mailfolder" ]||{ echo "Can not read $mailfolder" ; exit 1; } 
echo "$mailfolder has mail from:" 
grep "^From " $mailfolder

该脚本首先判断mailfolder是不是可读。假设可读则打字与印刷该文件中的”From”
一行。要是不行读则或操作生效,打字与印刷错误新闻后脚本退出。那里有个问题,那就是我们亟须有两个指令: 

  -打字与印刷错误信息 

  -退出程序 

咱俩选取花括号以匿名函数的情势将四个指令放到一起作为三个指令使用。一般函数将在下文提及。 不用与和或操作符,大家也能够用if表明式作别的业务,不过利用与或操作符会更有利很多。

 

 

    (3)文件相比

    (3)文件相比

if-then 高级特征

双圆括号

((  expression ))

表示数学表达数,允许在可比中蕴藏高级数学公式。除了 test
命令使用的标准数学操作符,还包含:

 符号       描述

val++   后增量

val–    后减量

++val   前增量

–val    前减量

!     逻辑否定

~      逐位取反

**     取幂

<<      左移

>>      右移

&           

|

&&      逻辑与

||        逻辑或

 

示例

if (( $val1 ** 2 > 90 ))

then

   (( val2 = $val1 ** 2 ))

   echo “The square of $val1 is $val2”

fi

 

三头括号

[[ expression ]]

双括号指令提供了格局匹配。

示例

if [[ $USER == r* ]]

then

  echo “Hello $USER”

else

  echo “Sorry, I don’t know you”

fi

 

瞩目:方括号随后和第①个方括号从前务必抬高三个空格,不然会报错。

在意:方括号随后和第②个方括号此前务必抬高2个空格,不然会报错。

case命令

case 命令以列表导向格式检查单个变量的八个值。

case variable in 
pattern1 | pattern2) commands1 ;; 
pattern3) commands2;;
*) default commands;;
esac

case 命令将钦定的变量与分歧的情势展开比较。假使变量与形式匹配,shell
执行为该方式钦命的命令。能够在一行中列出五个形式,使用竖条操作符将每一个方式分开。星号是任何列出的方式都不般配的拥有值。

以下是1个采取case的实例:

dirs=`ls $sourceRoot/android | tr '\n' ' '`
for i in $dirs
do
sourceFold=$sourceRoot/android/${i}
case ${i} in 
out)
echo "skip ${i}";;
kernel|frameworks|vendor|build)
cp -rfu $sourceFold $workRoot/android
echo "copy ${i}";;
*) 
ln -sf $sourceFold $workRoot/android
echo "linking ${i}";;
esac
done

再让大家看二个例子。
file命令能够辨认出三个加以文件的文件类型,比如: 

file lf.gz 

那将赶回: 

lf.gz: gzip compressed data, deflated, original filename, 

last modified: Mon Aug 27 23:09:18 2001, os: Unix 

上面有个称呼smartzip的台本,该脚本可以自行解压bzip2, gzip 和zip
类型的压缩文件: 

#!/bin/sh 
ftype=`file "$1"` 
case "$ftype" in 
"$1: Zip archive"*) 
unzip "$1" ;; 
"$1: gzip compressed"*) 
gunzip "$1" ;; 
"$1: bzip2 compressed"*) 
bunzip2 "$1" ;; 
*) echo "File $1 can not be uncompressed with smartzip";; 
esac 

你大概注意到我们在此间运用了1个独特的变量$1。该变量包蕴了传递给该程序的第1个参数值。

也等于说,当大家运行: 

smartzip articles.zip 

$1 便是字符串 articles.zip

 

4    数值相比较

4    数值相比较

 

循环结构 

    下表列出了测试五个值时可用的基准参数

    下表列出了测试五个值时可用的规范参数

for命令

for
命令用于通过一二种值重复的大循环。每一次重复使用类别中的一个值执行三个概念的命令集。

格式:

for var in list

do

  commands

done

在参数 list 中提供一种类用于迭代的值。for 循环认为各个值都用空格分隔。

 

只顾:可以将 do 语句与 for
语句放在同样行,然而必须选用分号将它与列表项分开:

  for var in list; do

 

列表值中包蕴单引号的拍卖方法

  • 动用转义字符(反斜杠符号)来转义单引号
  • 使用双引号来定义使用单引号的值

 

个中字段分隔符(internal 田野先生 separator, IFS)定义了 bash shell
用作字段分隔符的字符列表。暗中同意情状下,bash shell
将下边包车型客车字符看作字段分隔符。

  • 空格
  • 制表符
  • 换行符

假定处理能够包罗空格的数量时,就会发生干扰,能够在 shell
脚本中一时改变环境变量 IFS 的值,限制 bash shell
看作是字段分隔符的字符。

示例

#!/bin/bash
# reading values from a file

file=”states”

IFS=$’\n’
for state in `cat $file`
do
  echo “Visit beautiful $state”
done

 

使用通配符读取目录或拍卖多目录

示例

#!/bin/bash
# iterate through all the files in a directory

for file in /home/txj/* /home/txj/.b*
do
if [ -d “$file” ]
then
echo “$file is a directory”
elif [ -f “$file” ]
then
echo “$file is a file”
fi
done

 

比较

描述

n1 –eq n2

检查n1是否等于n2

n1 –ge n2

检查n1是否大于或等于n2

n1 –gt n2

检查n1是否大于n2

n1 –le n2

检查是否小于等于n2

n1 –lt n2

检查n1是否小于n2

n1 –ne n2

检查n1是否不等于n2

比较

描述

n1 –eq n2

检查n1是否等于n2

n1 –ge n2

检查n1是否大于或等于n2

n1 –gt n2

检查n1是否大于n2

n1 –le n2

检查是否小于等于n2

n1 –lt n2

检查n1是否小于n2

n1 –ne n2

检查n1是否不等于n2

C式 for 循环

格式

for (( variable assignment ;  condition ;  iteration process ))

有几项不依照标准 bash shell 的 for 方法

  • 变量的赋值可以包罗空格
  • 规格中的变量不以英镑符号做前缘
  • 迭代处理式不应用 expr 命令格式

示例

#!/bin/bash
# multiple variables

for (( a=1, b=10; a<=10; a++,b– ))
do
echo “$a – $b”
done

 

 

小心:测试命令中只可以处理整数

专注:测试命令中只可以处理整数

while 命令

while 命令格式

while test command

do

  other commands

done

在 while 命令中定义的 test 命令与在 if-then 语句中定义的格式一样。while
关键是钦赐的 test 命令的淡出状态必须依照循环中命令的周转情状改变。

示例

#!/bin/bash
# while command test

var1=10
while [ $var1 -gt 0 ]
do
echo $var1
var1=$[ $var1 – 1 ]
done

 

假使有多条 test
命令,唯有最后一条测试命令的淡出状态是用来支配循环是曾几何时甘休的。

#!/bin/bash
# tesing a multicommand while loop

var1=10

while echo $var1
        [ $var1 -ge 0 ]
do
echo “This is inside the loop”
var1=$[ $var1 – 1 ]
done

  

[root@local data]# cat number_test.sh
#!/bin/bash
value1=10 #定义变量value1、value2
value2=11
if [ $value1 -gt 5 ]    #测试value1的值是否大于5
then
    echo "The test value $value1 is greater than 5"
fi
if [ $value1 -eq $value2 ]        #测试value1的值是否和变量value2的值相等。
then
    echo "The values are equal"
else
    echo "The values are different"
fi
[root@local data]# cat number_test.sh
#!/bin/bash
value1=10 #定义变量value1、value2
value2=11
if [ $value1 -gt 5 ]    #测试value1的值是否大于5
then
    echo "The test value $value1 is greater than 5"
fi
if [ $value1 -eq $value2 ]        #测试value1的值是否和变量value2的值相等。
then
    echo "The values are equal"
else
    echo "The values are different"
fi

until 命令

until 命令刚好与 while 命令相反。

格式:

until test commands

do 

  other commands

done

until
 命令须要制订一条测试命令,那条命令通常产生一个非0的脱离状态。只要测试命令的脱离状态非0,
bash
shell就会执行列在循环其中的指令。一旦测试条件重返0退出状态,循环结束。

示例

#!/bin/bash
# using the until command

var1=100

until [ $var1 -eq 0 ]
do
echo $var1
var1=$[ $var1 – 25 ]
done

 

嵌套循环

日常供给迭代存款和储蓄在文书之中的项。须要整合三种技术:

  • 使用嵌套循环
  • 转移环境变量 IFS

示例

#!/bin/bash
# changing the IFS value
IFSOLD=$IFS
IFS=$’\n’
for entry in `cat /etc/passwd | grep ro `
do
echo “Values in $entry -“
IFS=:
for value in $entry
do
echo ” $value”
done
done

 

[root@local data]# bash
number_test.sh

[root@local data]# bash
number_test.sh

break 命令

break 命令是在处理进度中跳出循环的一种简单方法。

示例

#!/bin/bash
# breaking out of a for loop

for var1 in 1 2 3 4 5 6 7 8 9 10
do
if [ $var1 -eq 5 ]
then
break
fi
echo “Iteration number: $var1”
done
echo “The for loop is completed”

 

break 命令包涵单独的授命行参数值

break n

示例

#!/bin/bash
# breaking out of an outer loop

for (( a=1; a<4; a++ ))
do
echo “Outer loop: $a”
for (( b=1; b<100; b++ ))
do
if [ $b -gt 4 ]
then
break 2
fi
echo ” Inner loop: $b”
done
done

 

The test value 10 is greater than 5

The test value 10 is greater than 5

continue 命令

continue 命令是一种提前结束循环内命令,而不完全停下循环的章程。

示例

#!/bin/bash
# continuing an outer loop

for (( a=1; a<=5; a++ ))
do
echo “Iteration $a:”
for (( b=1; b<3; b++ ))
do
if [ $a -gt 2 ] && [ $a -lt 4 ]
then
continue 2
fi
var3=$[ $a * $b ]
echo ” The result of $a * $b is $var3″
done
done

 

The values are different

The values are different

巡回的出口

能够因此在 done 命令的末段添加管道或重定向循环的输出结果。

示例

#!/bin/bash
# redirecting the for output to a file

for (( a=1; a<10; a++ ))
do
echo “The number is $a”
done > test10-23.txt

5    字符串相比较

5    字符串相比

 

    条件测试运行字符串相比,下表列出了字符串附加测试

    条件测试运营字符串相比,下表列出了字符串附加测试

移位(shift) 

shift命令能够改变命令行参数的相持地点。使用
shift 命令时,暗中认可将每一个参数变量左移一个岗位。

示例 

#!/bin/bash
# demonstrating the shift command

count=1
while [ -n “$1” ]
do
echo “Parameter #$count = $1”
count=$[ $count + 1 ]
shift
done

比较

描述

str1 = str2

检查str1是否和str2 相同

str1 != str2

检查str1是否和str2不同

str1 < str2

检查str1 是否比str2小

str1 > str2

检查str1 是否比str2大

n str1

检查str1的长度是否非0

z str1

检查str1的长度是否为0

比较

描述

str1 = str2

检查str1是否和str2 相同

str1 != str2

检查str1是否和str2不同

str1 < str2

检查str1 是否比str2小

str1 > str2

检查str1 是否比str2大

n str1

检查str1的长度是否非0

z str1

检查str1的长度是否为0

 

    要测试叁个字符串是还是不是比另三个字符串大是2个烦劳的题材,首要有须臾间四个难点:

    要测试1个字符串是不是比另二个字符串大是两个劳动的标题,首要有须臾间四个难点:

select

格式

select variable in list

do

    commands

done

系列参数是用空格隔开的构建菜单的文书项列表。select
命令将列表中的每一项显示为贰个编号选项,然后为挑选展现一个破例的提示符(由
PS3 环境变量定义)。

示例

#!/bin/sh
echo “What is your favourite OS?”
select var in “Linux” “Gnu Hurd” “Free BSD” “Other”

do
  break
done
echo “You have selected $var”

下边是该脚本运维的结果: 

What is your favourite OS? 

1) Linux 

2) Gnu Hurd 

3) Free BSD 

4) Other 

#? 1 

You have selected Linux

(1)大于号和小于号必须转义,否则SHELL会把它们当做重定向符号,把字符串值当作文件名;

(1)大于号和小于号必须转义,不然SHELL会把它们当做重定向符号,把字符串值当作文件名;

 


repeat语句
repeat语句是tcsh提供的独有的循环语句.使用repeat命令须求shell对一个限令执行一定的次数.
语法格式:
  repeat count command
如;

foreach num ( $ *)
repeat $num echo -n " *"
echo " "
end

 

(2)大于和小于顺序和sort一声令下所利用的两样。

(2)大于和小于顺序和sort指令所利用的两样。

在字符串相比较测试中,大写字母被认为是超过小写字母的;比较测试中选拔的是正统的ASCII梯次,依据各种字符的ASCII数值来决定排序结果。

在字符串相比较测试中,大写字母被认为是当先小写字母的;比较测试中运用的是正统的ASCII逐一,依照每一个字符的ASCII数值来控制排序结果。

[root@local data]# cat str_comparison.sh
#!/bin/bash
var1=baseball
var2=hockey
if [ $var1 \> $var2 ]
then
    echo "$var1 is greater than $var2"
else
    echo "$var1 is lees than $var2"
fi
[root@local data]# cat str_comparison.sh
#!/bin/bash
var1=baseball
var2=hockey
if [ $var1 \> $var2 ]
then
    echo "$var1 is greater than $var2"
else
    echo "$var1 is lees than $var2"
fi

[root@local data]# bash
str_comparison.sh

[root@local data]# bash
str_comparison.sh

baseball is lees than hockey

baseball is lees than hockey

6    文件比较

6    文件相比较

    测试Linux上文件系统上文件和目录的意况。

    测试Linux上文件系统上文件和目录的气象。

比较

描述

d file

检查file 是否存在并是一个目录

e file

检查file是否存在

f file

检查file是否存在并是一个文件

r file

检查file是否存在并可读

s file

检查file是否存在并非空

w file

检查file是否存在并可写

x file

检查file是否存在并可执行

O file

检查file是否并属当前用户所有

G file

检查file 是否存在且默认组与当前用户相同

file1 –nt file2

检查file1是否比file2新

file1 –ot file2

检查file1是否比file2旧

比较

描述

d file

检查file 是否存在并是一个目录

e file

检查file是否存在

f file

检查file是否存在并是一个文件

r file

检查file是否存在并可读

s file

检查file是否存在并非空

w file

检查file是否存在并可写

x file

检查file是否存在并可执行

O file

检查file是否并属当前用户所有

G file

检查file 是否存在且默认组与当前用户相同

file1 –nt file2

检查file1是否比file2新

file1 –ot file2

检查file1是否比file2旧

[root@localdata]# cattestfile_exist.sh
#!/bin/bash
item_name=$HOME
echo
echo "The item being checked:$item_name"
echo
if [ -e $item_name ]
then #item_name does exist
    echo "The item,$item_name,does exist"
    echo "But is it a file?"
    echo
if [ -f $item_name ]
then #item_name is a file
    echo "Yes,$item_name is a file"
else #item_name is not a file
    echo "No,$item_name is not a file"
fi
else #item_name does not exist
    echo "The item,$item_name, does not exist"
    echo "Nothing to update"
fi
[root@localdata]# cattestfile_exist.sh
#!/bin/bash
item_name=$HOME
echo
echo "The item being checked:$item_name"
echo
if [ -e $item_name ]
then #item_name does exist
    echo "The item,$item_name,does exist"
    echo "But is it a file?"
    echo
if [ -f $item_name ]
then #item_name is a file
    echo "Yes,$item_name is a file"
else #item_name is not a file
    echo "No,$item_name is not a file"
fi
else #item_name does not exist
    echo "The item,$item_name, does not exist"
    echo "Nothing to update"
fi

[root@local data]# bash
testfile_exist.sh

[root@local data]# bash
testfile_exist.sh

The item being checked:/root

The item being checked:/root

The item,/root,does exist

The item,/root,does exist

But is it a file?

But is it a file?

No,/root is not a file

No,/root is not a file

7    复合条件测试

7    复合条件测试

澳门金沙国际 ,ifthan语句中得以应用布尔逻辑来构成测试

ifthan语句中能够运用布尔逻辑来组合测试

(1)
[ condition1 ] && [
condition2 ]

(1)
[ condition1 ] && [
condition2 ]

(2)
[ conditon1 ] || [
conditon2 ]

(2)
[ conditon1 ] || [
conditon2 ]

    第②种布尔运算使用AND布尔运算符来组合五个尺码。要让then一些的一声令下执行,五个标准必须都满足。

    第3种布尔运算使用AND布尔运算符来组合几个尺码。要让then一些的下令执行,四个标准必须都满意。

    第三种布尔运算使用OR布尔运算符来组合八个标准化。倘若任意条件为TRUEthen有些的命令就会实施。

    第二种布尔运算使用OR布尔运算符来组合三个标准化。即使任意条件为TRUEthen有个其他命令就会执行。

[root@localdata]# catcompund_comparison.sh

[root@localdata]# catcompund_comparison.sh

#!/bin/bash

#!/bin/bash

#

#

if [ -d $HOME ] && [
-w $HOME/testing ]

if [ -d $HOME ] && [
-w $HOME/testing ]

then

then

    echo “The file
exists and you can write to it”

    echo “The file
exists and you can write to it”

else

else

    echo “I can not
write to the file”

    echo “I can not
write to the file”

fi

fi

[root@local data]# bash
compund_comparison.sh

[root@local data]# bash
compund_comparison.sh

I can not write to the file

I can not write to the file

    第③个比较会检查用户的$HOME目录是不是留存。第一个比较会检查在用户的$HOME目录下是还是不是有个名叫testing的文件,以及用户是不是有该公文的写入权限。尽管四个相比中有1个前功尽弃了,if言辞就会破产,shell就会执行else的片段。若是三个标准化都由此了,则if说话通过,shell会执行then某些的指令。

    第⑦个比较会检查用户的$HOME目录是或不是存在。第贰个相比会检查在用户的$HOME目录下是还是不是有个名为testing的文本,以及用户是或不是有该文件的写入权限。假设八个比较中有贰个输球了,if讲话就会战败,shell就会进行else的有个别。要是七个规格都通过了,则if话语通过,shell会执行then有的的指令。

相关文章