淺析如何在Linux中自定義一條命令
序
在Linux系統(tǒng)中,自定義一條命令可以通過腳本編寫、alias命令創(chuàng)建別名、函數(shù)定義等方式實(shí)現(xiàn)。
這些方法允許用戶按自己的需求創(chuàng)建新指令,以快速、高效地執(zhí)行常用操作或復(fù)雜的命令序列。
腳本編寫是一種常見且靈活的方式,通過將一系列命令寫入一個(gè)文本文件并賦予執(zhí)行權(quán)限,用戶可以通過文件名調(diào)用這些命令,極大地提高工作效率并實(shí)現(xiàn)自動(dòng)化任務(wù)。
1 環(huán)境變量法
熟悉linux的都知道,大部分發(fā)行版都會(huì)判斷用戶目錄下是否有bin目錄,如果有就會(huì)將這個(gè)目錄加入環(huán)境變量
也就是說,我們可以將一些腳本寫好放到這個(gè)目錄下,也就是$HOME/bin目錄下,這樣我們就可以在終端直接調(diào)用腳本了
上述判斷bin目錄是否存在的部分一般會(huì)放在$HOME/.profile,我的Linux操作系統(tǒng)下這部分內(nèi)容如下:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# 如下幾行 shell 命令,不同 Linux 操作系統(tǒng)中情況可能不同。有可能沒有這幾行命令,則需要自己拷貝進(jìn)來。
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ]; then
PATH="$HOME/bin:$PATH"
fi當(dāng)然,如果之前目錄中沒有bin目錄,我們自己手動(dòng)在$HOME目錄下建立bin。
mkdir -p $HOME/bin/
創(chuàng)建好的shell腳本,需要賦予可執(zhí)行權(quán)限。
chmod +x $HOME/bin/xxx.sh
這個(gè)時(shí)候需要我們注銷后再登錄才可以,或者執(zhí)行source $HOME/.profile。
實(shí)際案例
mkdir -p $HOME/bin echo 'echo "Hello, $1!"' > $HOME/bin/hello.sh source $HOME/.profile //在任意路徑下均可執(zhí)行: hello.sh
2 腳本編寫
在Linux中,腳本通常是一系列的命令集合,存儲(chǔ)在一個(gè)文本文件中,這些命令按照一定順序執(zhí)行。
要?jiǎng)?chuàng)建一個(gè)腳本,首先需要確定用于編寫腳本的文本編輯器,如vim或nano。
然后,在編輯器中輸入需要自動(dòng)化執(zhí)行的命令序列。
創(chuàng)建腳本文件: 使用文本編輯器創(chuàng)建一個(gè)新文件,例如 myscript.sh。sh擴(kuò)展名表示這是一個(gè)shell腳本。
寫入命令: 在文件的開頭添加#!/bin/bash,這是一個(gè) shebang 行,指示系統(tǒng)使用哪個(gè)解釋器來運(yùn)行腳本。然后,下面寫入需要執(zhí)行的命令。
例如,創(chuàng)建一個(gè)簡單的腳本greet.sh,其內(nèi)容如下:
#!/bin/bash echo "Hello, $USER!"
這個(gè)腳本會(huì)輸出歡迎信息,其中$USER是一個(gè)環(huán)境變量,代表當(dāng)前的用戶名。
- 賦予執(zhí)行權(quán)限: 使用命令chmod +x greet.sh為腳本文件賦予執(zhí)行權(quán)限。
- 執(zhí)行腳本: 通過./greet.sh命令運(yùn)行腳本。
3 ALIAS命令創(chuàng)建別名
別名(alias)是對(duì)一條或多條命令的引用,可以讓用戶為復(fù)雜或長的命令序列設(shè)定簡短的名字。
創(chuàng)建臨時(shí)別名: 使用alias命令創(chuàng)建一個(gè)別名,比如alias l='ls -lA',這條命令會(huì)創(chuàng)建一個(gè)別名l,以后只需輸入l就可以執(zhí)行l(wèi)s -lA命令。
創(chuàng)建別名 (臨時(shí))
alias ll='ls -lA'
刪除別名
unalias [-a][別名]
-a : 刪除全部的別名
如: unalias ll
持久化別名: 為了讓別名在新的會(huì)話中依然有效,可以將其添加到~/.bashrc或~/.bash_profile文件中。編輯這個(gè)文件,將相同的alias命令添加進(jìn)去。
// 打開 .bashrc 文件 vim ~/.bashrc // 在文件末尾添加alias定義 alias mygpu='nvidia-smi' source ~/.bashrc
4 函數(shù)定義
在bash腳本中定義函數(shù)可以讓用戶創(chuàng)建包含多個(gè)命令的復(fù)合命令,函數(shù)比別名更加靈活,可以接受參數(shù)。
定義函數(shù): 函數(shù)的定義格式類似于其他編程語言。
例如,創(chuàng)建一個(gè)名為greet的函數(shù):
greet() {
echo "Hello, $1!"
}
在這個(gè)例子中,$1代表函數(shù)的第一個(gè)參數(shù)。
使用函數(shù): 函數(shù)定義后,可以在腳本的其他地方或命令行直接調(diào)用,例如greet World會(huì)輸出"Hello, World!"。
建立類似fish shell的函數(shù)機(jī)制
fish shell中自定義指令是使用函數(shù)的方式來實(shí)現(xiàn)的,一條自定義指令可以對(duì)應(yīng)一個(gè)函數(shù)
于是我們可以借助fish shell的這種思路來在bash上實(shí)現(xiàn)。實(shí)現(xiàn)方法如下:
step1 建立放置函數(shù)的文件夾
我的方法是在$HOME下建立.bash_func文件夾,可使用命令 mkdir -p $HOME/.bash_func 實(shí)現(xiàn)。
step2 在$HOME/.bashrc下添加加載函數(shù)的代碼
在$HOME/.bashrc后面添加以下部分:
if [ -d "$HOME/.bash_func" ]
then
if [[ $(ls $HOME/.bash_func | wc -c ) -gt 0 ]];then
for flist in $(ls $HOME/.bash_func)
do
. $HOME/.bash_func/$flist
done
fi
fi
這樣以來,我們?cè)趡/.bash_func/下建立文件寫函數(shù),啟動(dòng)終端后,就能自動(dòng)加載函數(shù),之后就可以做為自定義的指令使用。
比如,我們建立t_func文件,文件內(nèi)容如下:
function t_func(){
echo "hello,this is a demo!"
}
然后我們新打開一個(gè)終端,注意要新打開,或者你可以先把shell切換到sh,再切換到bash,使得.vimrc文件被加載,然后我們終端輸入t_func可以看到效果!
需要注意的是,要寫成函數(shù)的形式,雖然一個(gè)文件中可以寫多個(gè)函數(shù),但是建立一個(gè)文件寫一個(gè)函數(shù),一個(gè)函數(shù)就是一條自定義指令,這樣方便管理!
到此這篇關(guān)于淺析如何在Linux中自定義一條命令的文章就介紹到這了,更多相關(guān)Linux自定義命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
yum 安裝memcache permission denied(拒絕訪問) 問題
這篇文章主要介紹了yum 安裝memcache permission denied(拒絕訪問) 問題,需要的朋友可以參考下2017-03-03
Linux 塊設(shè)備驅(qū)動(dòng)代碼編寫
這篇文章主要介紹了Linux 塊設(shè)備驅(qū)動(dòng)代碼編寫,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Linux下Python腳本自啟動(dòng)與定時(shí)任務(wù)詳解
這篇文章主要給大家介紹了關(guān)于Linux下Python腳本自啟動(dòng)與定時(shí)任務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
linux下如何把進(jìn)程/線程綁定到特定cpu核上運(yùn)行
這篇文章主要介紹了linux下如何把進(jìn)程/線程綁定到特定cpu核上運(yùn)行問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Linux中對(duì)MySQL優(yōu)化實(shí)例詳解
這篇文章主要介紹了Linux中對(duì)MySQL優(yōu)化實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05
分享9個(gè)實(shí)戰(zhàn)及面試常用Linux Shell腳本編寫
這篇文章主要介紹了9個(gè)實(shí)戰(zhàn)及面試常用Shell腳本編寫,非常不錯(cuò),具有一定的收藏價(jià)值,需要的朋友可以參考下2018-10-10

