现在的位置: 首页 > 综合 > 正文

Shell开发的一些技巧和经验

2012年09月02日 ⁄ 综合 ⁄ 共 2292字 ⁄ 字号 评论关闭

 

1、截取字串

截取字串的两种方式:

echo ${VAR:STA:COUNT}

expr substr $VAR $STA $COUNT

VAR: 表示被截取的字符串源。

STA:表示开始截取的位置。

COUNT:截取的字符串的个数

上述两种方式有一些小的区别,下面用一个例子来说明:

S=12345

STA=2

COUNT=2

运行echo ${VAR:STA:COUNT}

结果输出:34

运行expr substr $VAR $STA $COUNT

结果输出:23

此外:在ksh中并不支持echo的这种方式。

 

2、变量定义

bash中,如果定义:A=3

此时A既可以当做字符串使用也可以当做数字使用

ksh中,如果定义:A=3

A只能当做变字符串使用

一种比较通用的方法就是使用typeset

typeset –I A=0

此外在kshtypeset还用很多参数可用:

1:typeset

将显示所有变量

2:typeset-u选项可以将一个量的字符成大写
/home/lee#typeset -u var=abc
/home/lee#echo $var
ABC

3:typeset-l选项将一个量的字符成小写
/home/lee#typeset -l var=ABC
/home/lee#echo $var
abc

4:typeset-L选项成一个左对齐4个字符串,有些像字符串截取 :-)
/home/lee#typeset -L4 var=abcdefg
/home/lee#echo $var
abcd

5:typeset-R选项成一个右对齐4个字符串
/home/lee#typeset -R4 var=abcdefg
/home/lee#echo $var
defg

6:typeset-Z选项把串成一个空填充,15个字符位的串,冒号用来保空白符
/home/lee#typeset -Z15 var="abc ddd"
/home/lee#echo "$var"
^^^^^^^^abc ddd #^
空白
/home/lee#typeset -LZ15 var="abc 123"
/home/lee#echo "$var$var"
abc 123 abc 123

7:n是一个被置成一个整数的,typeset命令将整数n前面补齐0,15个字符位
/home/lee#typeset -i n=24
/home/lee#typeset -Z15 n
/home/lee#echo $n
000000000000024

8:answer定一个--Yes成一个小写,对齐,一个字符的串
/home/lee#typeset -lL1 answer=Yes
/home/lee#echo $answer
y

typeset其他用法:
typeset -i num #
num一个整数,
:
/home/lee#typeset -i num=10
/home/lee#echo $num
10
/home/lee#typeset -i16 num=10
/home/lee#echo $num
16#a
/home/lee#typeset -i2 num=10
/home/lee#echo $num
2#1010
/home/lee#typeset -i8 num=10
/home/lee#echo $num
8#12

typeset -x #示被出的
typeset a b c #
如果在一个函数里定,a b c局部
typeset -r x=var#
置一个只读变

 

3、shellSQL*Plus的调用

调用之前,需先声明四个环境变量:

export ORACLE_HOME=/app/ebs10/ap/eb10db/9.2.0 #Oracle Home

export ORACLE_SID=orcl                         #Oracle SID

export PATH=$PATH:$ORACLE_HOME/bin            #PATH环境变量

export NLS_LANG=AMERICAN_AMERICA.JA16SJIS     #DB字符集

如果您的数据里面存在除英文以外的语言,则必须设置NLS_LANG的值,该值必须与您的DB语言一致:查询方法如下

SELECT USERENV('LANGUAGE') FROM DUAL

 

连接方法:

sqlplus -s $ORACLE_USER/$ORACLE_PWD << EOF

  @$SQL_SCRIPT;

EOF

-s参数表示不显示SQL*Plus的连接信息在控制台。

如果想获取sql的返回信息,则可用(注意等于号后面的命令由一对反引号(`)包围)

SQL_BUF=` sqlplus -s $ORACLE_USER/$ORACLE_PWD << EOF

  @$SQL_SCRIPT;

EOF

`

上述方法在ksh中调用的时候,如果返回的数据太大的话,则会产生一个shell错误

具体的错误代码是:

./VUAS1000.sh[65]: no space

Error 45 initializing SQL*Plus

Internal error

t0nsha补充:

如果想获取sql的返回信息,也可直接用grep获取,再通过grep的返回值($?)进行判断:

( sqlplus -s $ORACLE_USER/$ORACLE_PWD << EOF|grep "something" )

  @$SQL_SCRIPT;

EOF

if [ $? -eq 0 ];then

    echo "something was found!"

fi

 

FROM: http://blog.csdn.net/xiaxin_0926/archive/2009/05/15/4189256.aspx

抱歉!评论已关闭.