Shell开发的一些技巧和经验

it2024-03-23  14

 

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 $varABC3:typeset-l选项将一个量的字符成小写/home/lee#typeset -l var=ABC/home/lee#echo $varabc4:typeset-L选项成一个左对齐4个字符串,有些像字符串截取 :-)/home/lee#typeset -L4 var=abcdefg/home/lee#echo $varabcd5:typeset-R选项成一个右对齐4个字符串/home/lee#typeset -R4 var=abcdefg/home/lee#echo $vardefg6: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 1237:n是一个被置成一个整数的,typeset命令将整数n前面补齐0,15个字符位/home/lee#typeset -i n=24/home/lee#typeset -Z15 n/home/lee#echo $n0000000000000248:answer定一个--Yes成一个小写,对齐,一个字符的串/home/lee#typeset -lL1 answer=Yes/home/lee#echo $answerytypeset其他用法:typeset -i num #num一个整数,:/home/lee#typeset -i num=10/home/lee#echo $num10/home/lee#typeset -i16 num=10/home/lee#echo $num16#a/home/lee#typeset -i2 num=10/home/lee#echo $num2#1010/home/lee#typeset -i8 num=10/home/lee#echo $num8#12typeset -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

转载于:https://www.cnblogs.com/zlja/archive/2010/03/16/2449153.html

最新回复(0)