jasmine214--love

          只有當(dāng)你的內(nèi)心總是充滿快樂、美好的愿望和寧靜時(shí),你才能擁有強(qiáng)壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          shell 基礎(chǔ)知識(shí)整理

          Posted on 2010-11-27 09:45 幻海藍(lán)夢(mèng) 閱讀(433) 評(píng)論(0)  編輯  收藏 所屬分類: Linux

          1.     環(huán)境變量,相當(dāng)于全局變量。

          定義變量;打印變量; 將自定義變量轉(zhuǎn)成環(huán)境變量;顯示所有環(huán)境變量;取消某個(gè)or多個(gè)環(huán)境變量or 本地變量;一個(gè)命令把自定義變量轉(zhuǎn)成環(huán)境變量;顯式所有本地變量;本地變量設(shè)成只讀,即不可寫; env 結(jié)合grep的管道命令用來顯示希望查看的某個(gè)環(huán)境變量。

          $ name=kiki

          $ echo $(name)  or   $ echo ${age}  or  $echo $name

          $ export name

          $ env

          $ unset name  age

          $ export name="kiki"

          $ set

          $ readonly age="83"

          $ env | grep HOME

           

          2.     環(huán)境變量配置文件,包含/etc/profile~/.bashrc文件。

          1/etc/profile:在登錄時(shí),操作系統(tǒng)定制用戶環(huán)境時(shí)使用的第一個(gè)文件,此文件為系統(tǒng)的每個(gè)用戶設(shè)置環(huán)境信息,當(dāng)用戶第一次登錄時(shí),該文件被執(zhí)行。

          2~/.bashrc:該文件包含專用于你的bash shellbash信息,當(dāng)?shù)卿洉r(shí)以及每次打開新的shell時(shí),該該文件被讀取。

          3)最常用的環(huán)境變量PATH

          比如:修改環(huán)境變量,把交叉編譯器的路徑加入到PATH。在linux系統(tǒng)下,如果你下載并安裝了應(yīng)用程序,很有可能在鍵入它的名稱的時(shí)候出現(xiàn)“command not found”的提示內(nèi)容。如果每次都到安裝目標(biāo)文件夾內(nèi)找到可執(zhí)行文件來進(jìn)行操作就太繁瑣了,這就涉及到環(huán)境變量PATH的設(shè)置問題,而PATH的設(shè)置也是LINUX下定制環(huán)境變量的一個(gè)組成部分。

              $ echo $PATH

          /opt/fp_le/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/wangzhonghua/bin

          $ echo $PATH

          /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

          $ echo $PATH

          /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

           

          3.     /etc/profile文件的shell思想

          1)     特殊變量:$0 腳本名;$n  給腳本傳遞的參數(shù);$?  命令的執(zhí)行結(jié)果;

          2)     比較控制符:真假[-eq  ]   –eq,-neq, -ge,-gt,-le,-lt; 可以比較某個(gè)變量和某個(gè)值[ !=  ][ = ];也可以比較是否是目錄,還可以比較文件:空串[ -z ],and[ -a ],執(zhí)行[  -x   ]某個(gè)文件可執(zhí)行-x, 是否link [ -l ];是否只讀[ -r ];(1. w是否是空串,w是否可執(zhí)行。2.-f 表示正規(guī)文件,-w表示可寫。

          3)     當(dāng)前用戶的識(shí)別號(hào):id –ru (real user);當(dāng)前用戶的姓名 id –un; 當(dāng)前用戶的名字:hostname;當(dāng)前用戶是誰及何時(shí)登陸的:who am i

          If條件表達(dá)式與 [  ]&& 有相同的功能,但是&&只能達(dá)到一半的條件。

          If [    ]; then

          else

          fi

          4)     shell的函數(shù): 函數(shù)名(){},不需要提供參數(shù),在執(zhí)行函數(shù)的時(shí)候提供參數(shù)即可。

          5)     管道| 與重定向 有追加和覆蓋兩種 >,>> :把一個(gè)命令的輸出作為另一個(gè)命令的輸入。重定向有標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出兩種。

          wiki@wiki-desktop:/home/xufuli/backup/svnsync$ ll >kiki

          -bash: ll:找不到命令

           

          $ ll >kiki 2>&1

           

          6)     轉(zhuǎn)義序列: \n換行;\t調(diào)一個(gè)tab鍵。(),[]需要轉(zhuǎn)義的。

          ~$ last | awk '{print $1 "\n" $3}'

              7)定制shell環(huán)境

                  $ shopt -s cdspell,自動(dòng)糾正cd 拼寫錯(cuò)誤。

                  Checkwinsizebash在每個(gè)命令后檢查窗口大小,如果有必要,就更新LINESCOLUMNS的值;

                  Histappend;當(dāng)shell退出時(shí),歷史清單將添加到以HISTFILE變量的值命名的文件中,而不是覆蓋文件

           

              8eval 替換命令:然而當(dāng)在它前面放上eval時(shí),其結(jié)果是shell在執(zhí)行命令行之前掃描它兩次。

              9) alias :命令別名,

                  $ alias ll='ls -al'

              8linux特殊文件:/dev/null, linux下還有一個(gè)特殊的文件/dev/null,它就像一個(gè)無底洞,所有重定向到它的信息都會(huì)消失得無影無蹤。這一點(diǎn)非常有用,當(dāng)我們不需要回顯程序的 所有信息時(shí),就可以將輸出重定向到/dev/null。用來使終端不顯示任何信息。

              9case  條件語句的用法 以及腳本執(zhí)行的追蹤 –n檢查語法問題;-vshow出腳本再執(zhí)行;-x 跟蹤執(zhí)行每一步:

                  #!/bin/bash

            2

            3 case  $1 in

            4 "spring") echo "in spring";;

            5 "summer") echo "in summer";;

            6 "winter") echo "in winter";;

            7 esac

          7)     awk編程的了解,awk是一種編程語言,用于在linux/unix下對(duì)文本和數(shù)據(jù)進(jìn)行處理。數(shù)據(jù)可以來自標(biāo)準(zhǔn)輸入、一個(gè)或多個(gè)文件,或其它命令的輸出。它支持用戶自定義函數(shù)和動(dòng)態(tài)正則表達(dá)式等先進(jìn)功能,是linux/unix下的一個(gè)強(qiáng)大編程工具。它在命令行中使用,但更多是作為腳本來使用。awk的處理文本和數(shù)據(jù)的方式是這樣的,它逐行掃描文件,從第一行到最后一行,尋找匹配的特定模式的行,并在 這些行上進(jìn)行你想要的操作。如果沒有指定處理動(dòng)作,則把匹配的行顯示到標(biāo)準(zhǔn)輸出(屏幕),如果沒有指定模式,則所有被操作所指定的行都被處理。awk分別 代表其作者姓氏的第一個(gè)字母。因?yàn)樗淖髡呤侨齻€(gè)人,分別是Alfred AhoBrian KernighanPeter Weinberger

          $ awk '{print $2;}' testfile 表示打印每一行的第二列,自動(dòng)變量$1$2分別表示第 一列、第二列等,類似于Shell腳本的位置參數(shù),而$0表示整個(gè)當(dāng)前行。

           

           

          4.     變量整數(shù)聲明

          $ declare -i sum=100+50

          $ echo $sum

           

          5.     過濾器

          1)     管道過濾器:編譯器就是基于管道過濾器模式設(shè)計(jì)的:

          輸入:源程序
          預(yù)處理:負(fù)責(zé)宏展開和去掉注釋等工作。
          編譯:進(jìn)行詞法分析、語法分析、語義分析、代碼優(yōu)化和代碼產(chǎn)生。
          匯編:負(fù)責(zé)把匯編代碼轉(zhuǎn)換成機(jī)器指令,生成目標(biāo)文件。
          鏈接:負(fù)責(zé)把多個(gè)目標(biāo)文件、靜態(tài)庫和共享庫鏈接成可執(zhí)行文件/共享庫。
          輸出:可執(zhí)行文件/共享庫。

           

          2)     復(fù)合過濾器







          sed 是一種在線編輯器,它一次處理一行內(nèi)容。處理時(shí),把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩沖區(qū)中,稱為模式空間pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。接著處理下一行,這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有 改變,除非你使用重定向存儲(chǔ)輸出。Sed主要用來自動(dòng)編輯一個(gè)或多個(gè)文件;簡(jiǎn)化對(duì)文件的反復(fù)操作;編寫轉(zhuǎn)換程序等。

          $ sed '2,$d' example    刪除example文件的第二行到末尾所有行

          $ sed 's/test/mytest/g' example 文件中所有都替換在整行范圍內(nèi)把test替換為mytest。如果沒有g標(biāo)記,則只有每行第一個(gè)匹配的test被替換成mytest

          $ sed -e '1,5d' -e 's/test/check/' example      (-e)選項(xiàng)允許在同一行里執(zhí)行多條命令。如例子所示,第一條命令刪除15行,第二條命令用check替換test。命令的執(zhí) 行順序?qū)Y(jié)果有影響。如果兩個(gè)命令都是替換命令,那么第一個(gè)替換命令將影響第二個(gè)替換命令的結(jié)果。

          @sed -i 's/\[SVN_VER\]/$(SVN_REVISION)/g'  $(ONU_INSTALL)/version 在指定文件中當(dāng)前行前插入一行,此行的內(nèi)容用某某替換某某。

             

          6.     數(shù)組,set顯示的所有變量中是這樣的,season=([1]="spring" [2]="summer") ;打印數(shù)組變量值

          $ season[1]=spring

          $ season[2]=summer

          $ echo ${season[1]}

           

          7.     history 歷史命令,顯示最近100條命令;清除所有歷史命令;

          $ history 100

          $ history –c

           

          8.     打印輸出。轉(zhuǎn)義字符使能輸出-e,推薦用雙引號(hào)保持變量特性;

          $ echo -e  " kiki \n mina"

           

          9.     打包(音譯) tar文件 tarball

          @tar -jcvf $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.tar.bz2 $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.bin $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.bin.upf  j參數(shù)代表是以.tar.bz2作為擴(kuò)展名

          @tar -cf $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.bin.tar $(ONU_FIRMWARE_BIN)-$(SVN_REVISION).$@.bin.upf Lib/images/App4315.tkf Lib/images/Pers4315.tkf  不用j,z,參數(shù)的代表是以.tar作為擴(kuò)展名

           

           

          10.  shell 查找技巧:find xargs(參數(shù)替換) 用來刪除所有某種特點(diǎn)的文件。

          $ find -name "xufuli" | xargs rm –rf  通過管道將find的結(jié)果作為輸入,通過xargs作為rm命令的參數(shù)

          11.  更改權(quán)限;

          $chmod a+x  kiki.sh 

          12.  Makefilesed的使用

          @sed -i 's/\[SVN_VER\]/$(SVN_REVISION)/g'  $(ONU_INSTALL)/version 在指定文件中當(dāng)前行前插入一行,此行的內(nèi)容用某某替換某某。

           

          13.  文件測(cè)試功能file: $ file nullLog.sh用來測(cè)試文件是否是可執(zhí)行文件。可執(zhí)行文件是指二進(jìn)制文件。

          14.   

          15.  Makefile中一些極好的shell命令

          $ sudo rm -rf country/           刪除父子所有文件夾目錄

          $ sudo cp -rf xufuli/  kiki/     完整拷貝目錄結(jié)構(gòu)到另一個(gè)文件夾

          $ find -name "xufuli" | xargs rm –rf        在當(dāng)前目錄查找名為xufuli的目錄和文件,通過管道將find的結(jié)果作為輸入,通過xargs作為rm命令的參數(shù)

          $chmod a+x  kiki.sh              更改權(quán)限

          $chmod 755 $(ROOTFS_PATH)/home/www/html_asb/cgi-bin/*

          @sed -i 's/\[SVN_VER\]/$(SVN_REVISION)/g'  $(ONU_INSTALL)/version 在指定文件中當(dāng)前行前插入一行,此行的內(nèi)容用某某替換某某。

           

          主站蜘蛛池模板: 湘西| 昌图县| 宁晋县| 开远市| 剑川县| 黄龙县| 岳阳县| 青河县| 伊春市| 兴文县| 镇雄县| 沭阳县| 吴川市| 桓台县| 微山县| 金山区| 黄浦区| 祁门县| 彭山县| 贵港市| 原阳县| 烟台市| 博客| 清涧县| 平南县| 永济市| 巴青县| 海口市| 富锦市| 苏尼特左旗| 沈丘县| 宁安市| 济南市| 左云县| 建湖县| 胶南市| 郸城县| 莱芜市| 策勒县| 礼泉县| 开鲁县|