置頂 Shell碎碎念

2021-07-10 09:58:41 字數 3266 閱讀 4637

1. 字串如何大小寫轉換

str="this is a bash shell script."

1> tr方式     

newstr=`tr '[a-z]' '[a-z]' <<<"$str"`或者 newstr=$(echo $str |tr '[a-z]' '[a-z]')

2> typeset 

typeset -u variable (把variable的小寫轉換成大寫)

typeset -l variable (把variable的大寫轉換成小寫)

如:[oracle@node3 ~]$ typeset -u str

[oracle@node3 ~]$ str="this is a bash shell script."

[oracle@node3 ~]$ echo $str

this is a bash shell script.

2. 判斷變數中是否包含某個字串

str="this is a string"

[[ $str =~ "this" ]] && echo "\$str contains this"

3. 將文字檔案的內容按行儲存到陣列中

#!/bin/bash

i=0while

read line

doa[$i]="

$line

"i=$[$i+1

]done

for (( i=0; i<3; i++))

doecho"$

"done

注意:在這裡就不要用 cat dept.txt |while read line了,因為管道的命令都是在子shell中執行的,這意味著在子shell中賦值的變數對父shell是無效的。在本例中,該指令碼無法讀取賦給陣列的值。

4. 昨天的日期

date -d "1 day ago" "+%y-%m-%d"

date -d last-day +%y-%m-%d

5. 指定日期的後一天

date -d "20150303 1 days" +%y%m%d

6. awk將最後一行的每一列分行列印

awk 'end}'

7. awk去掉空格

1>    sub(/^[[:blank:]]*/,"",變數) 是去掉變數左邊的空白符

sub(/[[:blank:]]*$/,"",變數) 是去掉變數右邊的空白符

gsub(/[[:blank:]]*/,"",變數) 是去掉變數中所有的空白符

譬如:echo " hello world " | awk ''

|helloworld|

2>    echo " hello world " | awk ''

|hello world|

8. shell中如何實現數值向上取整

a=1.1

echo $a|awk ''

9. 如何顯示shell指令碼的執行過程

1> sh -x 1.sh

2> 

#!/bin/bash -x

word1=hello

word2=world

echo $word1 $word2

執行結果如下:

[oracle@node1 ~]$ ./1.sh

-->>注意執行的方式,如果是sh 1.sh則沒有這種效果

+ word1=hello

+ word2=world

+ echo

hello world

hello world

3> 只希望一部分顯示執行過程,可使用set -x 和set +x

[oracle@node1 ~]$ cat

1.sh

#!/bin/bash

set -x

word1=hello

word2=world

set +x

echo

$word1 $word2

[oracle@node1 ~]$ ./1.sh

+ word1=hello

+ word2=world

+ set +x

hello world

10. > /dev/null 2>&1

將標準輸出和標準錯誤重定向到/dev/null中

11. 陣列

$ fruits[0]="

"$ fruits[

1]="

grape

"$ fruits[

2]="

orange"$

echo

"$ $ $

"$ fruits=("""

grape""

orange

") -->> 如何對陣列進行賦值

$ echo

"$ $ $"$

echo"$

" -->> 如何獲取陣列的個數3$

echo"$

" -->> 如何獲取陣列的值

12. 如何用grep去掉空格和注釋

grep -ev "^$|^#" db_install.rsp 

13. 如何找出tkprof命令生成的outputfile中的select語句

awk 'beginif($0~/^$/) j=nr;if(i==j) print $0 }' 1.txt

因為select語句沒有寫在一行,且select語句結束以後會有空行,所以解決的思路是列印select及select以下的行,直到空行。所以當碰到select語句的時候,將行值賦給i和j,當碰到空行時,將行數賦給j,這樣j就發生了改變。判斷是否列印所在行的值就看i和j是否相等。

這樣列印出來的內容會有點難看,select和select語句之間沒有空行,所以在碰到select的時候就列印乙個空行。

注意:判斷空行的寫法/^$/,begin代表將i和j初始化為0,如果沒有begin語句,則處理每一行的時候i和j的值都會重置為0。

14. 在第三行行尾新增;號

sed -ie '3s/$/;/'

生活碎碎念

工作後,總是會有各種各樣的場合介紹自己,姓名呀 愛好啦 哪的人呢 每每說到愛好,總是覺得不知道應該怎樣表達。我喜歡旅行,喜歡美食,喜歡做飯 中餐西餐各種料理,對牛排和義大利面情有獨鍾 我也喜歡運動啊,籃球足球羽毛球 當然啦,籃球足球只是圍觀,是科比和梅西的無腦粉絲 喜歡滑冰和滑雪 技術雖不高,但也算...

技術碎碎念

註冊過後還沒怎麼來過,這次面試在最後一輪失敗了,不可推卸的是自己沒把相關思考與想法記錄下來,好記性不如亂鼻頭。回來後發了會兒呆。想到今天召開大家開會的時候,有人提出策劃發現bug了不要馬上就跑過來了,打斷思緒,上個bug還沒解決就又帶入了混亂。剛開始想是不是要用個管理工具,比如禪道,來管理這些問題,...

今日碎碎念

先匯報一下今天的工作。早上看了 物流案例 的 物流系統評價 與 物流系統 兩章,收穫頗豐,待會會將所得所感一一記錄下來。中午12點準時出發,奔赴華工五山區參加廣東移動在14點舉行的筆試,感想多多,待會也一併記下來。下午5點半左右回到宿舍,開啟電腦,滿心希望flexsim系統可以正常執行,結果搗鼓了近...