Linux系統設置:set命令詳解
set命令作⽤主要是顯⽰系統中已經存在的shell變數,以及設置shell變數的新變數值。使⽤set更改shell特性時,符號"+"和"-"的作⽤分別是打開和關閉指定的模式。set命令不能夠定義新的shell變數。如果要定義新的變數,可以使⽤命令以變數名=值的格式進⾏定義即可。
語法
set(選項)(參數)
選項
-a:標⽰已修改的變數,以供輸出⾄環境變數。
-b:使被中⽌的後台程序⽴刻回報執⾏狀態。
-C:轉向所產⽣的⽂件⽆法覆蓋已存在的⽂件。
-d:Shell預設會⽤雜湊表記憶使⽤過的指令,以加速指令的執⾏。使⽤-d參數可取消。
-e:若指令傳回值不等於0,則⽴即退出shell。
-f:取消使⽤通配符。
-h:⾃動記錄函數的所在位置。
-H Shell:可利⽤"!"加<指令編號>的⽅式來執⾏history中記錄的指令。
-k:指令所給的參數都會被視為此指令的環境變數。
-l:記錄for循環的變數名稱。
-m:使⽤監視模式。
-n:只讀取指令,⽽不實際執⾏。
-p:啟動優先順序模式。
-P:啟動-P參數後,執⾏指令時,會以實際的⽂件或⽬錄來取代符號連接。
-t:執⾏完隨後的指令,即退出shell。
-u:當執⾏時使⽤到未定義過的變數,則顯⽰錯誤信息。
-v:顯⽰shell所讀取的輸⼊值。
-x:執⾏指令後,會先顯⽰該指令及所下的參數。
參數
取消某個set曾啟動的參數。
實例
使⽤declare命令定義⼀個新的環境變數"mylove",並且將其值設置為"Visual C++",輸⼊如下命令:
declare mylove='Visual C++' #定義新環境變數
再使⽤set命令將新定義的變數輸出為環境變數,輸⼊如下命令:
set -a mylove #設置為環境變數
執⾏該命令後,將會新添加對應的環境變數。⽤戶可以使⽤命令和命令分別顯⽰和搜索環境變數"mylove",輸⼊命令如下:
env | grep mylove #顯⽰環境變數值
此時,該命令執⾏後,將輸出查詢到的環境變數值。
¥
5.9
網路文庫VIP限時優惠現在開通,立享6億+VIP內容
立即獲取
Linux系統設置:set命令詳解
Linux系統設置:set命令詳解
set命令作⽤主要是顯⽰系統中已經存在的shell變數,以及設置shell變數的新變數值。使⽤set更改shell特性時,符號"+"和"-"的作⽤分別是打開和關閉指定的模式。set命令不能夠定義新的shell變數。如果要定義新的變數,可以使⽤命令以變數名=值的格式進⾏定義即可。
語法
set(選項)(參數)
選項
-a:標⽰已修改的變數,以供輸出⾄環境變數。
第 1 頁
-b:使被中⽌的後台程序⽴刻回報執⾏狀態。
-C:轉向所產⽣的⽂件⽆法覆蓋已存在的⽂件。
-d:Shell預設會⽤雜湊表記憶使⽤過的指令,以加速指令的執⾏。使⽤-d參數可取消。
-e:若指令傳回值不等於0,則⽴即退出shell。
-f:取消使⽤通配符。
-h:⾃動記錄函數的所在位置。
-H Shell:可利⽤"!"加<指令編號>的⽅式來執⾏history中記錄的指令。
第 2 頁
-k:指令所給的參數都會被視為此指令的環境變數。
-l:記錄for循環的變數名稱。
-m:使⽤監視模式。
-n:只讀取指令,⽽不實際執⾏。
-p:啟動優先順序模式。
-P:啟動-P參數後,執⾏指令時,會以實際的⽂件或⽬錄來取代符號連接。
-t:執⾏完隨後的指令,即退出shell。
-u:當執⾏時使⽤到未定義過的變數,則顯⽰錯誤信息。
第 3 頁
-v:顯⽰shell所讀取的輸⼊值。
-x:執⾏指令後,會先顯⽰該指令及所下的參數。
參數
取消某個set曾啟動的參數。
實例
使⽤declare命令定義⼀個新的環境變數"mylove",並且將其值設置為"Visual C++",輸⼊如下命令:
declare mylove='Visual C++' #定義新環境變數
第 4 頁
再使⽤set命令將新定義的變數輸出為環境變數,輸⼊如下命令:
set -a mylove #設置為環境變數
執⾏該命令後,將會新添加對應的環境變數。⽤戶可以使⽤命令和命令分別顯⽰和搜索環境變數"mylove",輸⼊命令如下:
env | grep mylove #顯⽰環境變數值
此時,該命令執⾏後,將輸出查詢到的環境變數值。
2. linux中set的用法是什麼
日常運維工作中都知道touch命令是用來創建一個新的空文件的,但是還有一個重要的作用今天給大家說一下,那就是更改文件日期。
一般我們主要用於把文件日期修改為目前日期:touch -d "日期" 文件名例如:將test的日期調整為兩天前touch -d "2 days ago" test,touch -t 時間 文件名
例如:將test文件日期改為2016/9/12 9:53
touch -t 1609120953 test
3. linux命令 set -ex 什麼意思
-e 腳本中的命令一旦運行失敗就終止腳本的執行
-x 用於顯示出命令與其執行結果(默認shell腳本中只顯示執行結果)
4. linux中,命令行下,輸入:`set`。執行後就什麼也沒有,然後輸什麼顯示什麼,無法返回,求救中
set
功能說明:塌改或設置shell。
語 法:set [+-abCdefhHklmnpPtuvx]
補充說明:團伍set指令能設置所使用shell的執行方式,可依照不同的需求來做設置。
參 數:
-a 標示已修改的變數,以供輸出殲畢至環境變數。
-b 使被中止的後台程序立刻回報執行狀態。
-C 轉向所產生的文件無法覆蓋已存在的文件。
-d Shell預設會用雜湊表記憶使用過的指令,以加速指令的執行。使用-d參數可取消。
-e 若指令傳回值不等於0,則立即退出shell。
-f 取消使用通配符。
-h 自動記錄函數的所在位置。
-H Shell 可利用"!"加<指令編號>的方式來執行history中記錄的指令。
-k 指令所給的參數都會被視為此指令的環境變數。
-l 記錄for循環的變數名稱。
-m 使用監視模式。
-n 只讀取指令,而不實際執行。
5. Linux篇:從rm -rf 引發的腳本安全閑聊(set 命令)
上周剛經歷了一個「刪庫跑路」的慘重事件,不知哪位無邪的童鞋把Confluence 的數據存儲目錄 /var 清空了,結果群眾的怒火燃燒上了天空
這次結合自己的一些思考來記錄一些有關腳本安全的點
先來看一個簡單的案例
在用戶主目錄下創建safe目錄及相關文件用於測試演示
假如寫一段腳本刪除safe目錄下所有文件:
這段是不是看起來沒有問題,但如果由於有些大心臟的同學粗心,寫成下面這樣
最終,腳本都變成了rm -rf * ,可怕至極
其實在shell腳本當中,為了防止這種現象,我們可以藉助set 命令來實現相關控制
關於set 命令有較多參數,這里介紹最常用的幾個
我們以剛才圖4那段有問題的腳本說事
為保證不錯刪東西 ,我們加一個set -u 選項 ,判斷變數是否存在
我們執行一下,看看效果
看,報錯啦,dir這個變數沒有聲明,ls 查看一下文件,發現都還存在
set -e 與set -u 通常搭配在一起使用
一個是遇到錯誤退出,一個是發現空變數報錯
這兩個搭配在一起放在腳本里可以防止一些變數為空導致文件全被清空的問題
拓展一下:
如果只想應用在腳本的某一段中,那麼
開始段落前加set -e 表示範圍開始
結束段落後加 set +e 表示範圍結束
set -x 與set + x同理。
1、刪文件其實不用rm -rf ,不是受迫性需要,不要使用rm -rf
2、修改、刪除系統文件或其他重要的東西,先備份一份
3、非特殊需要,不建議在root下操作,普通用戶即可
4、腳本加上set -e 與set -u保證安全
6. linux的shell腳本中的set是什麼意思怎麼理解
set命令作用主要是顯示系統中已經存在的shell變數,以及設置shell變數的新變數值。使用set更改shell特性時,符號"+"和"-"的作用分別是打開和關閉指定的模式。set命令不能夠定義新的shell變數。如果要定義新的變數,可以使用declare命令以變數名=值的格式進行定義即可。使用:set(選項)(參數)
例如:
declare mylove='Visual C++' #定義新環境變數
再使用set命令將新定義的變數輸出為環境變數,輸入如下命令: set -a mylove
標示已修改的變數,以供輸出至環境變數。
-b:使被中止的後台程序立刻回報執行狀態
-C:轉向所產生的文件無法覆蓋已存在的文件
-d:Shell預設會用雜湊表記憶使用過的指令,以加速指令的執行。使用-d參數可取消。
-e:若指令傳回值不等於0,則立即退出shell。
-f:取消使用通配符。
-h:自動記錄函數的所在位置。
-H Shell:可利用"!"加<指令編號>的方式來執行history中記錄的指令。
-k:指令所給的參數都會被視為此指令的環境變數。
-l:記錄for循環的變數名稱。
-m:使用監視模式。
-n:只讀取指令,而不實際執行。
-p:啟動優先順序模式。
-P:啟動-P參數後,執行指令時,會以實際的文件或目錄來取代符號連接。
-t:執行完隨後的指令,即退出shell。
-u:當執行時使用到未定義過的變數,則顯示錯誤信息。
-v:顯示shell所讀取的輸入值。
-x:執行指令後,會先顯示該指令及所下的參數。
7. 請教linux下shell 中 set 的用法
使用set命令可以設置各種shell選項或者列出shell變數.單個選項設置常用的特性. 在某些選項之後-o參數將特殊特性打開.在某些選項之後使用+o參數將關閉某些特性, 不帶任何參數的set命令將顯示shell的全部變數.除非遇到非法的選項,否則set總是返回ture.
當BASH shell被調用時,可以列出全部的選項.當前的選項集列在$-中.在option參數被處理後,其他的參數被賦值到位置參數中(,,...,$n)
格式
set [--abefhkmnptuvxldCHP] [-o option name] [arguments ...]
詳解:
選項 說明
-a 自動向已經修改的變數或為導出後序命令的變數作出標志
-b 不是在原提示符之前,而是立即引發終止後台任務的狀態表
-e 如果命令帶非零值返回,立即退出 -
f 禁止帶擴展名的路徑
-h 定義函數時,定位和存儲函數命令,當函數被執行時,通常查詢 函數命令
-k 所有的關鍵詞參數,而不只是那些命令名前的關鍵詞參數,被放 在環境命令中
-m 監視器模式,啟動任務控制.此選項默認支持系統shell交互.後 台進程以單獨的進程組運行,在每次完成任務時顯示包含退出的 狀態行
-n 讀取命令但不執行命令.通常監查shell腳本的句法錯誤.交互 shell被忽略
-o option-name 選項名可以是下列之一:
選項 說明
allexport 同-a選項
braceexpand shell執行花括弧擴展,在默認情況下起作用
emacs 使用emacs風格命令行編輯介面.除非shell以-noline-editing 選項啟動,否則當shell交互時,通過默認啟動該選項
errexit 同-e選項
histexpand 同-H選項
ignoreeof 其結果是好像shell命令IGNOREEOF=10被執行
interactive 允許單詞前帶#號,以使得在交互shell中忽略命令行的全部字元
-commands
monitor 同-m選項
noclobber 同-C選項
noexec 同-n選項
noglob 同-f選項
nohash 同-d選項
notify 同-b選項
nounset 同-u選項
physical 同-p選項
posix 改變BASH屬性以匹配標准,默認操作不同於POSIX1003.2標准
verbose 同-v選項
vi 使用vi風格的命令行編輯器
XTRACE 同-x選項,如果沒有給出選項名,顯示當前選項值
-p 打開特權模式(在此模式,$ENV文件被處理,不能從環境中繼承 shell函數.如果是有效用戶ID而不是實用戶組則自動啟動.關閉 此選項將使得有效用戶和組IDs設置實用戶和組IDs)
-t 在讀取命令並執行之後退出
-u 當執行參數括展時,把非設置變數作為錯誤處理(如果擴展企圖 出現在非設置變數中,shell顯示錯誤信息.如果不是互動式,則 帶非凌值退出)
-v 輸入行被讀取時,顯示shell輸入行
-x 在每個簡單命令被擴展之後,顯示PS4擴展值,之後是要執行的命令
-l 保存和恢復綁定在命令中的名稱
-d 禁止執行查找散列命令(通常,命令被保存在散列表中,一旦被找到 就不再繼續查找)
-C 效果好像是執行了noclobber=shell命令
-H 使用!風格的歷史替代(當shell交互時,在默認情況下,此選項有效)
-P 如果設置此參數,當執行改變目錄命令cd時,不遵循符號鏈接,而是 使用實際的目錄
-- 如果在選項後沒有參數,不設置位置參數.否則,即使一些參數以a 選項開始,也要把位置參數設置為argument
- 結束選項的信號,將引發其餘的參數被賦值到位置參數中(-x和-v 選項被關閉.如果沒有argument,位置參數將保留未改變的參數)
8. Linux裡面set -e命令作用是什麼
Linux裡面set -e命令作用是,如果一個命令返回一個非0退出狀態值(失敗),就退出.
這個命令-e參數企業應用極少
set的「+」 ,"-" 分別用於關閉或者打開某些特性;具體的特性有很多,這里介紹 -e 特性:
set -e ; 表示後續所有的bash 命令的返回code 如果不是0,那麼腳本立即退出,後續的腳本將不會得到執行的機會;
set +e ; 這個是默認的狀態,表示就算後續的命令如果返回值不是0,那麼腳本依然向下執行;
所以 set -e其實就是從設置的位置起,給腳本的每一條命令加上了同一個退出條件;而set +e 則是取消這種設置;
看下面的例子:
[root@oldboy ~]# cat test.sh
#!/bin/bash
function lookupstr(){
grep "sles" /etc/os-release >/dev/null 2>&1
if [ "$?" -ne 0 ];then
echo -e "Can not find the 'sles' string in file. "
fi
}
echo "Below results based on: set +e"
set +e
lookupstr
echo "Below results based on: set -e"
set -e
lookupstr
[root@oldboy ~]# ./test.sh
Below results based on: set +e
Can not find the 'sles' string in file.
Below results based on: set -e
[root@oldboy ~]#
set -e option 可以幫助優化腳本