截取字串的两种方式:
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
此外在ksh中typeset还用很多参数可用:
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、shell中SQL*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:
原文链接: