shell編程注意事項
1,指令的執行是從上而下,從左而右的分析與執行
2,指令的下達時:指令,選項與參數之間的多個空白都會被忽略掉
3,空白行會被忽略掉,并且tab鍵所推開的空白同樣視為空格鍵
4. 如果一行的內容太多,則可以使用『 \[Enter] 』來延伸至下一行
5,『 # 』可做為批注,任何加在 # 后面的資料將全部被視為批注文字而被忽略
如果程序文件名是 /home/dmtsai/shell.sh 好了可以有底下幾個執行方法:
? 1,直接指令下達: shell.sh 文件必須要具備可讀與可執行 (rx) 的權限,然后:
o 絕對路徑:使用 /home/dmtsai/shell.sh 來下達指令;
o 相對路徑:假設工作目錄在 /home/dmtsai/ ,則使用 ./shell.sh 來執行
o 變量『PATH』功能:將 shell.sh 放在 PATH 指定的目錄內,例如: ~/bin/
? 2,以 bash 程序來執行:透過『 bash shell.sh 』或『 sh shell.sh 』來執行
shell腳本編程
編程語言的分類:根據運行方式
編譯運行:源代碼–》編譯器(編譯)–》程序文件
解釋運行:源代碼–》運行時啟動解釋器,由解釋器邊解釋邊運行,速度更快
根據其編程過程中功能的實現是調用庫還是調用外部的程序文件
shell腳本編程
利用系統上的命令及編程組建進行編程
完整編程:
利用庫或編程組件進行編程
編程模式:過程式編程語言,面向對象的編程語言
程序=指令+數據
過程式:以指令為中心來組織代碼,數據是服務于代碼
順序執行
選擇執行
循環執行
代表:C,bash
對象式:以數據為中心來組織代碼,圍繞數據來組織指令
類(class):可被實例化對象,操作 組成
代表:Java,C++,Python
shell腳本編程:過程式編程,解釋運行,依賴于外部程序文件運行
如何寫shell腳本
腳本的第一行,頂格:給出shebang解釋器路徑,用于指明解釋執行當前腳本的解釋器程序文件
常見的解釋器:
#!/bin/bash
#!/use/bin/python
#!/usr/bin/perl
文本編輯器:nano
行編輯器:sed
全屏幕編程器:nano vim
shell腳本是什么?
命令的堆積:
但很多命令不具有冪等性,需要用程序邏輯來判斷運行條件是否滿足,以避免其運行中發生錯誤,并不是所有錯誤都會影響腳本的運行
運行腳本
1,賦予執行權限,并直接運行此程序文件
chmod +x /PATH/TO/SCRIPT_FILE
2,直接運行解釋器,將腳本以命令參數傳遞給解釋器程序
bash /PATH/TO/SCRIPT_FILE
注意:腳本中的空白行會被解釋器忽略,不會顯示空白行,如果想顯示,就在該行輸入echo就可以了
腳本中,除了shebang,余下所有以#開頭的行,都會被視作注釋行而被忽略,不會顯示出來,此即為注釋行
shell腳本的運行時通過運行一個子shell進程實現的
練習:寫一個腳本,實現如下功能
1,顯示/etc目錄下所有以大寫P或小寫p開頭的文件或目錄本身
2,顯示/var目錄下的所有文件或目錄本身,并將顯示結果中的小寫字母轉換為大寫后顯示
3,創建臨時文件/tmp/myfile.XXXX
#!/bin/bash
ls -d /etc/[pP]*
ls -d /var/* |tr 'a-z' 'A-Z'
mktemp /tmp/myfile.XXXX
bash的配置文件:
兩類
profile類:為交互式登陸的shell提供配置
bashrc類:為非交互式登錄的shell進程提供配置
登陸類型
交互式登錄的shell進程
直接通過某終端輸入賬號和密碼后登陸打開的shell進程
使用su命令:su -USERNAME或使用 su-L USERNAME執行的登陸切換
非交互式登錄shell進程
su USERNAME執行的登陸切切換
圖形界面下打開的終端
運行腳本(bash運行腳本,腳本中包含shell,就是子shell)
profile類
全局:對所有用戶都生效
/etc/profile
/etc/profild.d/*.sh
用戶個人:僅對當前用戶有效
~/.bash_profile
功用;
1,用于定義環境變量
2,運行命令或腳本
bashrc類
全局:
/etc/bashrc
用戶個人
~/.bashrc
功用:
1,定義本地變量
2,定義命令別名
注意:僅管理員可修改全局配置文件
配置文件的讀取次序
交互式登錄shell進程(登錄系統)
/etc/profile–>/etc/profile.d/* –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc
非交互式登錄shell進程(腳本)
~/.bashcr –> /etc/bashrc –> /etc/profile/d/*
命令行中定義的特性,例如變量和別名作用域為當前shell進程的生命周期
配置文件定義的特性,只對隨后新啟動的shell進程有效
讓通過配置文件定義的特性立即生效
1,通過命令行重復定義一次
2,讓shell進程重讀配置文件(在.bashrc新定義的alias不會立即生效,采用下面兩種方法)
~]# source /PATH/FROM/CONF_FILE
~]# ./PATH/FROM.CONF_FILE
原創文章,作者:wutianyou,如若轉載,請注明出處:http://www.www58058.com/31749
對腳本基礎總結的較為詳細,但是腳本更應該注重實戰,而不是停留在理論哦,只有多看,多謝,才能寫出優秀的腳本哦,