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

本文介绍了Shell脚本的基础语法,包括字符串与数字的比较操作、条件连接、函数定义及调用等内容。通过本文,读者可以了解如何在Shell脚本中进行条件判断、使用逻辑运算符以及如何创建和调用函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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           退格键,即擦除前面一个字符

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值