shell编程基础(2.2 SHELL编程语法)

来源:互联网 发布:mysql5.7 for mac 编辑:程序博客网 时间:2024/06/03 15:58

7 比较操作

比较操作一般用在条件判断中,以下语法使用条件判断为例:

7.1 字符串比较

1)字符串相等比较

if [ $str = value ]; then        #注意等号两边比较有空格,否则为赋值运算

fi

 

2)字符串是否为空

if [ -$str = - ]; then        #-没有任何含义,只是为了增加可读性

fi

 

if [ X$str = X ]; then        #X没有任何含义,只是为了增加可读性

fi

 

3)字符串不相等比较

if [ $str != value ]; then       #注意等号两边比较有空格,否则为赋值运算

fi

 

if [ ! $str = value ]; then      #!为not的含义,即取反

fi

 

7.2 数字比较

1)大于、大于等于

if [ $str -gt 100 ]; then       #-gt表示大于

fi

 

if [ $str -ge 100 ]; then       #-ge表示大于等于

fi

 

2)小于、小于等于

if [ $str -lt 100 ]; then       #-lt表示小于

fi

 

if [ $str -le 100 ]; then       #-le表示小于等于

fi

 

2)等于、不等于

if [ $str eq 100 ]; then       #-eq表示等于

fi

 

if [ $str -ne 100 ]; then       #-ne表示不等于

fi

 

if [ ! $str -eq 100 ]; then       #!表示取否,-eq表示等于

fi

 

7.3 判断条件连接

1)与/and,即要求表达式1与表达式2同时为真

if express1 && express 2 ;          #&&表示与/and含义 -a

then

fi

 

if [ str1 = “aa” ] && [ str2 = “bb” ] ;    

then

fi

 

 

2)或/or,即要求表达式1或者表达式2之一为真

if express1 || express 2 ;            #||表示或/or含义 -o

then

fi

 

if [ str1 = “aa” ] || [ str2 = “bb” ] ;    

then

fi

 

3)取反,

if ! express1 ;                   #!表示去反

then

fi

 

if [ ! $? –eq 0 ];

then

fi

 

 

8 SHELL函数

 

可以将SHELL中需要重复执行的代码写成函数,与C编程的函数一致。

8.1 函数格式

定义函数的格式为:

函数名()

{

   ...

}

或者

函数名(){

   ...

}

两者方式都可行。如果愿意,可在函数名前加上关键字function,建议增加。

function 函数名()

{

 ...

}

 

8.2 向函数传入参数

函数可以带参数调用,调用方式为

函数名称 参数列表

 

函数取得传入的参数,与SHELL得到调用的参数完全一致:

判断参数个数:

$#

取参数:

$1  $2

 

8.3  函数返回参数

函数可以使用return 返回调用参一个值。调用者可以在调用函数后得到函数的返回值:

$?得到,如:

#调用格式:aaa parameter

aaa()

{

   return 1

}

 

#错误用法

a=`aaa para`  #无法得到返回值1

 

#正确用法

aaa para

ret=$?

 

如果使用exit,将退出SHELL程序

 

8.4  将常用函数写成库函数

为了重复利用代码,可以将函数写成库函数的方式,然后在SHELL中包含进行即可使用:

. libraryfile

 

9其他基本语法

9.1 条件连接符

and与

命令行:command1 && command2   #如果command1执行成功,执行commnad2

如:rm * && echo "File successfully removed"

(建议不要使用以上语法,因为语法不常用,可读性不强)

表达式:express1 && express2

如:if [ $1 -eq 1 ] && [ $1 -eq 1 ]

    then

      ...

    fi

 

or或

命令行:command1 || command2   #仅当前一个命令执行出错时才执行后一条命令

如:rm * || echo "File removed failed"

(建议不要使用以上语法,因为语法不常用,可读性不强)

表达式:express1 || express2

如:if [ $1 -eq 1 ] || [ $1 -eq 1 ]

    then

      ...

    fi

 

9.2 包含库函数

#. 空格之后将文件的路径, 一般放在程序的起始部分

. ./comm_func.sh.rc

 

9.3 信号处理

trap "echo ___ $0 interrupted ___; exit 1" 2

 

9.4 分割符

SHELL默认的分割符IFS为空格与TAB键。程序中可以使用定制的分割符

如:从dbaccess下载数据没有指定delimiter时,字段分割为|

OLD_IFS=$IFS

IFS=|

Read col1 col2 col3 < datafile

IFS=$OLD_IFS

 

9.5终端的一些知识

1) 使字符显示方式正常或者反转显示

echo\033[m\c   #正常显示

echo\033[7m\c  #反转显示

 

2)设置图形模式或者字符模式

echo\033(B\c   #字符模式

echo\033(0\c   #图形模式

 

3)从终端得到一个字符

TTY=`tty`

$1='`dd if=$TTY bs=1 count=1 2>/dev/null`'

 

4)定位光标位置

echo "\033[$1;$2H\c"  #其中$1表示行,$2表示列

 

5) 设置终端参数

stty可以用来设置与限制终端属性,如:终端与计算机之间的传输率、退格、中断等。

echo[-echo]     是否回显

intr                生成中断信号,默认使用del按键生成

erase           退格键,即擦除前面一个字符

 

原创粉丝点击