博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell开发的一些技巧和经验
阅读量:4177 次
发布时间:2019-05-26

本文共 2400 字,大约阅读时间需要 8 分钟。

 

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://qktai.baihongyu.com/

你可能感兴趣的文章
Apache Commons概览(备查)
查看>>
HTTP及其2.0版本综述
查看>>
Java对HTTP2的支持
查看>>
Java10基于Java API编写HTTP2客户端详解
查看>>
Java8中基于OkHttp3编写HTTP2客户端详解
查看>>
Spring Framework 5中的对HTTP/2客户端和服务器的集成
查看>>
Spring Boot 2.0中嵌入式Web容器(如Tomcat)对HTTP2的支持详解
查看>>
Spring框架spring-web模块中的RestTemplate类详解
查看>>
Spring框架5的spring-web模块中的Java对象与HTTP消息之间的数据转换器一览
查看>>
Java应用与HTTP服务之间的粘合剂OpenFeign详解
查看>>
Spring Cloud OpenFeign详解
查看>>
Jersey的Filter详解
查看>>
JAX-RS与Jersey的Interceptor详解
查看>>
Apache Maven Release Plugin插件详解
查看>>
Logback及其MDC功能详解
查看>>
OpenStack4j访问OpenStack Q版本的Identity服务v2.0
查看>>
Java 11新特性
查看>>
Docker的网络类型及驱动器
查看>>
Docker容器支持IPv6的方法
查看>>
Can not deserialize instance of java.lang.String out of START_OBJECT token
查看>>