Shell開發的一些技巧和經驗

2021-05-22 00:14:23 字數 3804 閱讀 5843

1、擷取字串

擷取字串的兩種方式:

echo $

expr substr $var $sta $count

var:

表示被擷取的字串源。

sta:表示開始擷取的位置。

count

:擷取的字串的個數

上述兩種方式有一些小的區別,下面用乙個例子來說明:

s=12345

sta=2

count=2

執行echo $

結果輸出:

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 $var

abc3:typeset的-l

選項將乙個

變數的字元

變成小寫

/home/lee#typeset -l var=abc

/home/lee#echo $var

abc4: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 1237:變

量n是乙個被

設定成乙個整數的變數

,typeset

命令將整數n前面

補齊0,共15

個字元位

/home/lee#typeset -i n=24

/home/lee#typeset -z15 n

/home/lee#echo $n

0000000000000248:變

量answer被給

定乙個值

--yes並變

成乙個小寫,左

對齊,乙個字元的串

/home/lee#typeset -ll1 answer=yes

/home/lee#echo $answer

ytypeset

其他用法

: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_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的返回值($?)進行判斷:

一些shell技巧

1.批量刪除某些指定檔案 我們都知道用find,很快就可以給出 find name your pattern exec rm f 恩,不過還有更快更簡潔的方法,用find自帶的delete find name your pattern delete 2.列出當前目錄下的所有目錄 不遞迴 你能想到幾種...

shell一些技巧和知識點

表示的是乙個命令執行完,忽略其返回值,繼續執行下一行 表示只有前面為true才繼續執行後面的命令,否則忽略,可以理解為短路執行 表示子前面為false才繼續執行後面的命令,這個比以前看到的解釋更容易理解 凡是要輸出字串的,最好用引號括起來,否則容易被shell理解為命令,這一點很容易疏忽 是一種命令...

總結Django一些開發經驗

最喜歡的還是 django 的 orm 框架。公司的專案都是前後分離的,使用 django 做後端介面開發還是很高效的。特此總結一些 django 開發的小經驗。先說一些最最基礎的吧。使用 virtualenv 隔離開發環境 使用 pip 管理專案依賴,主要就是乙個小技巧,使用 pip freeze...