Bash+Quick+Reference 筆記4

 Bash+Quick+Reference 筆記3

昨天收到噹噹網的面試通知,是測試開發工程師,主要是自動化,環境的維護和開發。我這段時間一直糾結於自己將來工作的方向是啥?一開始,公司的cto給我的定位是系統工程師,然後某些所謂不知所然的領導給我的定位是運維工程師,而一開始我進入公司做的卻是我在tibco的時候所作的QA,我自己也很迷茫,也一直找不到方向自己該朝哪個方向去前進,因爲公司當前的處境,我沒有真實地做過運維,而且很多測試工作由於我當時的反抗,我很多測試工作業不再參與,我唯一能夠感同身受增長的就是一個完善的系統交付思想,以及不斷增長的linux系統知識。朋友會說讓工作來決定我的方向,但是我現在的平臺,出去後人家都不咬我,我拿什麼籌碼去讓別人選擇我。於是我一直在尋找,也發現了些許端倪吧。我審視下自己,審視下自己的處境。

我:說實話,現在的公司真的讓人很鬱悶,社保到公積金到現在都沒有完全弄好,這是我大學畢業後一份正式的工作,但是結果手續都差強人意,有個同事突然生了大病,很多昂貴的醫藥費也只能自掏腰包。公司的辦公地點位於一個小區的一層,附近還有工地施工,沒有年終獎金也從來不說。但是我想說,這些我進入公司之前,我都知道,我也是帶着激情來工作的,我也從來不會因爲這些表面的東西而厭惡這個公司。我想說的是作爲一個startup的創業公司,激情是最重要的,如果很多事情大家搞官僚化,大家不再是兄弟姐妹同一戰線,如果你讓你的職工喪失了激情,那麼你拿什麼吸引員工保持對你忠誠。在此,我也不想多說什麼了,我感受到的都是自己的悲涼處境,因爲我自忖是一個忍耐度極高的人,如果我都爆發了,那麼這個閾值已經大大超過了我的極限。

我想在此說:如果我拿到offer,我真要走了。別了我的公司。

#######################################################################

不好意思,廢話說多了,我有時候真心很簡單,但是很多複雜的內容卻搞得自己很難受,只要讓我接觸linux的東西,做什麼都很高興。下面繼續吧:

continuing:

變量的引用和替換:

var{var:-value}如果變量var有值了,就用var的值,如果沒有值,則使用value。

var{var:=value}如果var設置了,就用var,如果沒有,表達式值爲value,且設置var爲value。

var{var:?value}沒設置的話就提示value的錯誤提示信息。

var{var:+value}如果設置了就用,沒設置就不用。

var{#var}:使用這個var的長度作爲值。

{#*}:使用位置變量的數目同{#@}user the num of positional parameters

{var#pattern}:use the value after removing pattermn from the left.{var##pattern}同時,只不過拿掉最長的。比如var的值爲10234,pattern爲10,那麼第一個剩下後爲234.當然第二個是指var有多個10的話,就都會拿掉。

上面的兩個把#換成%之後,是從右邊開始拿掉

${!prefix*},${!prefix@}列出變量名字以prefix開頭的比如echo ${!JAVA*}如果設置了JAVA_HOME的話就會出現。

${var:pos},${var:pos:len} ${var/pat/rep1} ${var/pat} ${var/#pat/rep1} ${var/%pat/rep1}

上面這些變量替換都比較複雜了,建議讀者自行研究,也不是很難,同正則是類似的。還有一條就是:

BASH提供了一種特殊的語法使得一個變量能夠指向另一個變量。例子:

great="hello,world"

friendly_message=great

echo ${!friendly_message}

hello,world

#examples:

u=up d=down blank=

echo ${u}root

echo ${u:-$d}(此處的冒號是可選的。)

echo${tmp-`date`}

echo ${blank="no data"}

echo ${blank:="no data"}(一樣的效果)

blank is set but it's null ,so printed no data,set the blank to be no data

echo ${blank}

tail=${PWD##*/}(這個類似於basename)就是從左邊開始,把所有同/匹配的都去掉,剩下後的。也就是basename命令所具有的作用了。

############以上這些都是針對變量的,下面講一些針對內建的變量的###########

$# number of cmd arguments參數的個數

$- 原文是:Options currently in effect(arguments supplied on command line or to set ).The shell sets some options automatically.也就是說當你使用ls -a的時候還有默認附件除a之外的選項。執行echo $-顯示himBH。這5個字符就是默認的選項。

$? 最後一條命令執行後的退出狀態,一般0表示正確執行,1到126是用戶自定義的,127到200多少來着(記不清了)是系統的。但是我知道127是代表command not found。

$$ 當前進程的pid

$! 最近的一個後臺進程的pid。

$0 腳本的名字。或者是非腳本的話,一般返回的都是-bash。就是當前shell

$n 位置變量。1到9是不需要加brace(花括號),超過了就需要加了。${10}

$*,$@顯示所有的變量值。(一個是連續的"  " ,一個是" " " " " ")

##########################################

還有很多bash的變量(不常用):

$_ BASH BASH_ARGC BASH_ARGV BASH_COMMAND BASH_EXECUTION_STRING BASH_LINENO BASH_REMATCH BASH_SOURCE BASH_SUBSHELL BASH_VERSINFO[0] {0到5}

BASH_VERSION BASH_CWORD COMP_CWORD COMP_LINE COMP_COWORD  等等。如果你想要使用某些variable,那麼你可以在.profile中定義

比如SHELL PS1 PS2 PS3 PS4 TERM TMOUT HISTCHARS TIMEFORMAT 

BASH支持one-dimensional array 一維數組

message={hi  there how are you today}

message[0]=hi message[1]=there message[2]=how

declaring arrays is not required.Any valid reference to a subscripted variable can create an array.數組的引用:

${name[i]}如果想把其中的值變爲整數的話可以使用let。

${name} user element 0 of array name

${name[*]}use all elements of array name

${name[@]}same as previous

${#name[*]}use the number of elements in array name=${#name[@]}

除此之外還有很多同c語言一樣的語法知識:比如\a,\n等等,在此不再贅述。

#############################

下面是設計算術運算的表達:

$(( expr )) use the value of the enclosed arithmetic expression

B#n:n是基數,B是進制。8#100表示十進制的64.

operator:++ -- + - ! ~ ** * / %等等

基本上變量的相關內容就到這裏了。我講得亂七八糟的,希望大家諒解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章