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]
可以看出,當執行命令成功和失敗時,$? 的值是不同的
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是解釋執行的指令碼語