1. 程式人生 > >linux基礎之shell程式設計(1)

linux基礎之shell程式設計(1)

shell:屬於弱型別程式語言

什麼是弱型別,什麼是強型別?

  • 強型別:變數在使用前,必須事先宣告,甚至還需要初始化;
  • 弱型別:變數用時宣告,甚至不區分型別;

變數賦值,引用

賦值:VAR_NAME=VALUE
引用:${VARNAME} (花括號一般可以省略)
例:

[root@iZ28g26851kZ ~]# name=test --賦值
[root@iZ28g26851kZ ~]# echo $name  --引用
test
[root@iZ28g26851kZ ~]# 

bash變數型別

  • 環境變數

    export VARNAME=VALUE ; 作用域為當前shell程序及其子程序。
    命令列中啟動的指令碼會繼承當前shell環境變數;


    系統自動執行的指令碼(非命令列啟動)就需要自我定義需要的各環境變數;
    例:

    [root@iZ28g26851kZ ~]# JAVA_HOME=/opt/java/jdk7/
    [root@iZ28g26851kZ ~]# export JAVA_HOME
    [root@iZ28g26851kZ ~]# echo $JAVA_HOME
    /opt/java/jdk7/
    [root@iZ28g26851kZ ~]# 
  • 本地變數

    set VARNAME=VALUE: 作用域為整個bash程序;(set關鍵字 可以省略)

  • 區域性變數

    local VARNAME=VALUE:作用域為當前程式碼段;(local 是關鍵字)

  • 位置變數

    $1,$2, ...
    位置變數是用來引用指令碼的引數的

  • 特殊變數

    特殊變數是用來儲存一些特殊資料的。
    $?:上一個命令的執行狀態返回值;
    例:

    [[email protected] ~]# ls
    libiconv-1.14         mhash-0.9.4.tar.gz  mysql-5.1.51.tar.gz  nginx-1.8.0.tar.gz
    libiconv-1.14.tar.gz  mysql-5.1.51        nginx-1.8.0
    [[email protected] ~]# echo $?
    0
    [[email protected]
    ~]# lsss -bash: lsss: command not found [[email protected] ~]# echo $? 127 [[email protected] ~]#

    可以看出,當執行命令成功和失敗時,$? 的值是不同的
    0: 正確執行
    1-255:錯誤執行;(1,2,127系統預留)

/dev/null

軟體裝置,bit bucket,資料黑洞
什麼意思呢?
當命令執行的結果我們不需要顯示出來時,就可以重定向到/dev/null中,資料不會在/dev/null中儲存,所以不會產生垃圾資料
例:

[root@iZ28g26851kZ ~]# ls &> /dev/null
[root@iZ28g26851kZ ~]# cat /dev/null  --可以發現,資料並不存在
[root@iZ28g26851kZ ~]# echo $?
0
[root@iZ28g26851kZ ~]# lsss &> /dev/null
[root@iZ28g26851kZ ~]# echo $?
127
[root@iZ28g26851kZ ~]# 

這樣就可以只獲取命令是否執行成功的狀態,而不需要知道命令執行的詳細結果

釋放(撤銷)變數

unset VARNAME
例:

[root@iZ28g26851kZ ~]# echo $name
test
[root@iZ28g26851kZ ~]# unset name
[root@iZ28g26851kZ ~]# echo $name

[root@iZ28g26851kZ ~]# 

操作變數時,什麼時候加$符號,什麼時候不加$符號

  • 操作變數本身不需要加$符號
  • 操作變數的值要加$符號

檢視當前shell中的變數

set 不加任何引數可以列出當前所有變數

檢視當前shell中的環境變數

printenv
env
export

給字串變數追加值

對於shell來說,預設所有的變數都是字串

[root@iZ28g26851kZ ~]# mylist=www
[root@iZ28g26851kZ ~]# mylist=${mylist}qqq
[root@iZ28g26851kZ ~]# echo $mylist
wwwqqq
[root@iZ28g26851kZ ~]# 

那麼問題來了,如果設定java的環境變數?

[root@iZ28g26851kZ ~]# export PATH=$PATH:${JAVA_HOME}/bin
[root@iZ28g26851kZ ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/opt/java/jdk7/bin
[root@iZ28g26851kZ ~]# 

當然這樣只是臨時的,退出當前shell後就失效了

如何讓自己寫的檔案當指令碼執行

在檔案開頭加上 #!/bin/bash 就行了
#! 叫 shebang(魔數) ,用來指定指令碼直譯器的路徑,所以這裡寫上/bin/bash 就行了
例:

#!/bin/bash
#這是註釋
ls -al
~                                                                                                            
~           

將檔案儲存為list.sh(當然檔名可以隨便寫)
此時檔案還沒有x許可權

-rw-r--r--  1 root root        33 May  7 12:00 list.sh

新增許可權

[root@iZ28g26851kZ ~]# chmod +x list.sh

好,現在執行,

[root@iZ28g26851kZ ~]# list.sh
-bash: list.sh: command not found
[root@iZ28g26851kZ ~]# 

居然不行???,
好吧,其實是當執行一個命令時,系統預設會先去環境變數的路徑下尋找可執行程式,
也可以直接給定可執行程式的路徑,

[[email protected] ~]# ./list.sh 
total 30364
dr-xr-x---.  5 root root      4096 May  7 12:03 .
dr-xr-xr-x. 22 root root      4096 Dec 27 23:24 ..
-rw-------   1 root root     12296 May  7 08:52 .bash_history
-rw-r--r--.  1 root root        18 May 20  2009 .bash_logout
-rw-r--r--   1 root root       270 May  7 08:52 .bash_profile
-rw-r--r--.  1 root root       176 Sep 23  2004 .bashrc
-rw-r--r--.  1 root root       100 Sep 23  2004 .cshrc
-rw-------   1 root root        41 May  3 17:36 .lesshst
、、、、、、、、、、、、、、、、、
-rw-r--r--.  1 root root       129 Dec  4  2004 .tcshrc
-rw-------   1 root root      6937 May  7 12:03 .viminfo
[[email protected] ~]# 

哈哈,這樣就搞定了~

相關推薦

linux基礎shell程式設計(1)

shell:屬於弱型別程式語言 什麼是弱型別,什麼是強型別? 強型別:變數在使用前,必須事先宣告,甚至還需要初始化; 弱型別:變數用時宣告,甚至不區分型別; 變數賦值,引用 賦值:VAR_NAME=VALUE 引用:${VARNAM

Linux基礎Shell程式設計

1 概述 Shell是一個命令列直譯器,它為使用者提供了一個向Linux核心傳送請求以便執行程式的介面系統級程式,使用者可以用Shell來啟動、掛起、停止甚至是編寫一些程式 Shell還是一個功能相當強大的程式語言,易編寫、易除錯、靈活性強。Shell是解釋執行的指令碼語言,在Sh

linux基礎shell程式設計(2)-條件判斷,算數運算,測試

bash中如果實現條件判斷? 條件測試型別 整數測試 字元測試 檔案測試 條件測試的表示式 有三種 [ expression ] --方括號與表示式之間一定要有一個空格 [[ expression ]] test exp

Linux學習shell 程式設計基礎(二)

一、bash環境變數 HOME、MAIL、SHELL、PATH 等,環境變數大都用大寫字母組成 [[email protected] dalianmao]# echo $SHELL /bin/bash [[email protected] dalianmao]# echo

Linux學習shell 程式設計基礎(一)

一、linux中經常和正則表示式聯合使用的工具 grep sed awk(自己去研究吧). 二,以grep為例,有以下正則操作 特殊符號彙總 特殊符號 代表意義 [:alnum:] 代表英文

Linux學習基礎Shell程式設計——正則表示式

1、正則表示式與萬用字元 》正則表示式用來在檔案中匹配符合條件的字串,正則是包含匹配。grep、awk、sed等命令可以支援正則表示式。 》萬用字元用來匹配符合條件的檔名,萬用字元是完全匹配。ls、find、cp等這些命令不支援正則表示式,所以只能使用shell自己的萬用字元來進行匹配了

linux基礎6-shell程式設計

閱讀目錄 1、type [-ta] name 2、環境變數和自定義變數的顯示命令 2.1:env命令的顯示 2.2:set命令的顯示 2.3:export命令的顯示 2.4:PS1命令提示符 2.5:bash下變數的設定的規則 2.6:linux語系的問題 2.7:鍵盤讀取

Linux學習Shell程式設計——Bash變數——環境變數

1、環境變數,一部分是系統自定義的,還有一部分是使用者新增的,使用者可以改變其值 》環境變數是什麼? 使用者自定義變數只在當前的shell中生效,而環境變數會在當前Shell和這個Shell的所有子Shell當中生效。如果把環境變數寫入相應的配置檔案,那麼這個環境變數就會在所有的Shel

linux開發shell程式設計

1、第一個shell程式   #!/bin/bash   echo "What is your name?"   read PERSON   echo "Hello, $PERSON" 備註:(1)“#!” 是一個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種Shell。echo命令用

Linux作業系統Shell程式設計

Linux作業系統之Shell程式設計 Shell是種命令解釋程式,也可以看作是一種命令語言的直譯器。 使用者在與Shell互動

Linux基礎Shell與變數

一、提出問題 在平時的工作中,我們經常會碰到設定環境的問題,例如將應用的執行路徑新增到PATH中,方便程式的執行;在Linux中更多的時候是跟shell打交道,很多通過shell啟動的應用或者服務都需要設定環境變數,例如啟動es需要設定一些環境變數,那麼Shell到底是什麼?Shell又跟環境變數有什麼關係

Linux基礎學習Shell程式設計——字元擷取命令相關——printf、cut、awk、sed

  一、字元擷取命令之cut命令 1、字元擷取命令有哪些? grep  cut    printf(嚴格來說不算)   awk   sed  命令 2、grep 是在檔案當中提取符合條件的行  

嵌入式初學者學習嵌入式必看必看書籍列表,有電子檔的同學可以共享出來,謝謝 Linux基礎 1、《Linux與Unix Shell 程式設計指南》 2、《嵌入式Linux應用程式開發詳解》

嵌入式初學者參考書目 無論學習哪方面的程式設計,都需要掌握基礎知識和程式語言,其中《深入理解計算機作業系統》是比較重要的。下面是一些計算機關於嵌入式方面的推薦,有些是借鑑他人的歸納。 Linux基礎 1、《Linux與Unix Shell 程式設計指南》 2、《嵌入式Linux應用程式開發詳

Linux基礎基礎命令1

amp 日歷 版本 時間 右箭頭 ESS 結構體 art initrd 基本命令一、Linux的基本原則:1、 由目的單一的小程序組成; 組合小程序完成復雜任務;2、 一切皆文件;3、 盡量避免捕獲用戶接口; (盡量不和用戶進行交互, 就是一個程序一但開始運行, 就不需要用

Linux學習網路程式設計(TCP相關基礎知識)

言之者無罪,聞之者足以戒。 - “詩序”、 1、網路位元組序: 在TCP的編寫過程中需要從網路位元組序轉換到主機位元組序,當然也需要從主機位元組序轉換到網路位元組序 htons 把 unsigned short型別從主機序轉換到網路序htonl把unsigned long型別從

linux中的shell程式設計變數

shell程式設計主要是為了簡化linux系統管理的。 shell中的變數是一種弱型別的變數,c,java等語言是一種強型別的語言。 linux中的所有的變數預設型別都是字元型別的 零、bash變數的分類 bash變數的型別 變數型別

linux學習筆記shell程式設計(一)

shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則

linux學習筆記shell程式設計(三)流程控制(3)---for迴圈

for迴圈 語法格式1:指定迴圈範圍 for 變數 in value1 value2... do something done 指令碼例項1 #!/bin/bash for i in 1 2

linux學習筆記shell程式設計(三)流程控制(4)while迴圈和until迴圈

while迴圈和until迴圈 ###、 while迴圈 不定迴圈,程式碼格式: while [判斷] do something done 指令碼例項1: #!/bin/bash #從1加到

linux學習筆記shell程式設計

1.什麼是Shell?   Shell是一個命令列直譯器,它為使用者提供一個向linux核心傳送請求以便執行程式的介面系統級程式,使用者可以用Shell來啟動、掛起、停止甚至編寫一些程式。   Shell還是一個功能強大的程式語言,易編寫、已除錯、靈活性強。Shell是解釋執行的指令碼語