淺析如何在Linux中自定義一條命令
序
在Linux系統(tǒng)中,自定義一條命令可以通過腳本編寫、alias命令創(chuàng)建別名、函數(shù)定義等方式實現(xiàn)。
這些方法允許用戶按自己的需求創(chuàng)建新指令,以快速、高效地執(zhí)行常用操作或復(fù)雜的命令序列。
腳本編寫是一種常見且靈活的方式,通過將一系列命令寫入一個文本文件并賦予執(zhí)行權(quán)限,用戶可以通過文件名調(diào)用這些命令,極大地提高工作效率并實現(xiàn)自動化任務(wù)。
1 環(huán)境變量法
熟悉linux的都知道,大部分發(fā)行版都會判斷用戶目錄下是否有bin目錄,如果有就會將這個目錄加入環(huán)境變量
也就是說,我們可以將一些腳本寫好放到這個目錄下,也就是$HOME/bin
目錄下,這樣我們就可以在終端直接調(diào)用腳本了
上述判斷bin目錄是否存在的部分一般會放在$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目錄,我們自己手動在$HOME目錄下建立bin。
mkdir -p $HOME/bin/
創(chuàng)建好的shell腳本,需要賦予可執(zhí)行權(quán)限。
chmod +x $HOME/bin/xxx.sh
這個時候需要我們注銷后再登錄才可以,或者執(zhí)行source $HOME/.profile。
實際案例
mkdir -p $HOME/bin echo 'echo "Hello, $1!"' > $HOME/bin/hello.sh source $HOME/.profile //在任意路徑下均可執(zhí)行: hello.sh
2 腳本編寫
在Linux中,腳本通常是一系列的命令集合,存儲在一個文本文件中,這些命令按照一定順序執(zhí)行。
要創(chuàng)建一個腳本,首先需要確定用于編寫腳本的文本編輯器,如vim或nano。
然后,在編輯器中輸入需要自動化執(zhí)行的命令序列。
創(chuàng)建腳本文件: 使用文本編輯器創(chuàng)建一個新文件,例如 myscript.sh。sh擴(kuò)展名表示這是一個shell腳本。
寫入命令: 在文件的開頭添加#!/bin/bash,這是一個 shebang 行,指示系統(tǒng)使用哪個解釋器來運(yùn)行腳本。然后,下面寫入需要執(zhí)行的命令。
例如,創(chuàng)建一個簡單的腳本greet.sh,其內(nèi)容如下:
#!/bin/bash echo "Hello, $USER!"
這個腳本會輸出歡迎信息,其中$USER是一個環(huán)境變量,代表當(dāng)前的用戶名。
- 賦予執(zhí)行權(quán)限: 使用命令chmod +x greet.sh為腳本文件賦予執(zhí)行權(quán)限。
- 執(zhí)行腳本: 通過./greet.sh命令運(yùn)行腳本。
3 ALIAS命令創(chuàng)建別名
別名(alias)是對一條或多條命令的引用,可以讓用戶為復(fù)雜或長的命令序列設(shè)定簡短的名字。
創(chuàng)建臨時別名: 使用alias命令創(chuàng)建一個別名,比如alias l='ls -lA',這條命令會創(chuàng)建一個別名l,以后只需輸入l就可以執(zhí)行l(wèi)s -lA命令。
創(chuàng)建別名 (臨時)
alias ll='ls -lA'
刪除別名
unalias [-a][別名]
-a : 刪除全部的別名
如: unalias ll
持久化別名: 為了讓別名在新的會話中依然有效,可以將其添加到~/.bashrc或~/.bash_profile文件中。編輯這個文件,將相同的alias命令添加進(jìn)去。
// 打開 .bashrc 文件 vim ~/.bashrc // 在文件末尾添加alias定義 alias mygpu='nvidia-smi' source ~/.bashrc
4 函數(shù)定義
在bash腳本中定義函數(shù)可以讓用戶創(chuàng)建包含多個命令的復(fù)合命令,函數(shù)比別名更加靈活,可以接受參數(shù)。
定義函數(shù): 函數(shù)的定義格式類似于其他編程語言。
例如,創(chuàng)建一個名為greet的函數(shù):
greet() { echo "Hello, $1!" }
在這個例子中,$1代表函數(shù)的第一個參數(shù)。
使用函數(shù): 函數(shù)定義后,可以在腳本的其他地方或命令行直接調(diào)用,例如greet World會輸出"Hello, World!"。
建立類似fish shell的函數(shù)機(jī)制
fish shell中自定義指令是使用函數(shù)的方式來實現(xiàn)的,一條自定義指令可以對應(yīng)一個函數(shù)
于是我們可以借助fish shell的這種思路來在bash上實現(xiàn)。實現(xiàn)方法如下:
step1 建立放置函數(shù)的文件夾
我的方法是在$HOME下建立.bash_func文件夾,可使用命令 mkdir -p $HOME/.bash_func 實現(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
這樣以來,我們在~/.bash_func/下建立文件寫函數(shù),啟動終端后,就能自動加載函數(shù),之后就可以做為自定義的指令使用。
比如,我們建立t_func文件,文件內(nèi)容如下:
function t_func(){ echo "hello,this is a demo!" }
然后我們新打開一個終端,注意要新打開,或者你可以先把shell切換到sh,再切換到bash,使得.vimrc文件被加載,然后我們終端輸入t_func可以看到效果!
需要注意的是,要寫成函數(shù)的形式,雖然一個文件中可以寫多個函數(shù),但是建立一個文件寫一個函數(shù),一個函數(shù)就是一條自定義指令,這樣方便管理!
到此這篇關(guān)于淺析如何在Linux中自定義一條命令的文章就介紹到這了,更多相關(guān)Linux自定義命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Ubuntu 安裝cuda10.1驅(qū)動的實現(xiàn)步驟
這篇文章主要介紹了Ubuntu 安裝cuda10.1驅(qū)動的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Apache與Tomcat服務(wù)器整合的基本配置方法及概要說明
網(wǎng)上的亂七八糟的資料太多了,很多都是自說自話,希望這篇文章能給大家?guī)硪恍┣逦乃悸贰?/div> 2010-12-12Ubuntu18.04安裝Nvidia顯卡驅(qū)動教程(圖文)
這篇文章主要介紹了Ubuntu18.04安裝Nvidia顯卡驅(qū)動教程(圖文),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07詳解Linux使用ss命令結(jié)合zabbix對socket做監(jiān)控
zabbix是一個基于WEB界面的提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級的開源解決方案。這篇文章主要分為三塊進(jìn)行說明:介紹ss命令;對機(jī)器總體的socket進(jìn)行監(jiān)控;某些機(jī)器連接該機(jī)器的數(shù)量進(jìn)行監(jiān)控2021-06-06Centos6.5搭建java開發(fā)環(huán)境配置詳解
這篇文章主要介紹了Centos6.5搭建java開發(fā)環(huán)境配置詳解,非常具有實用價值,需要的朋友可以參考下。2016-12-12Ubuntu Server 11.10安裝配置lamp(Apache+MySQL+PHP)
這篇文章主要介紹了Ubuntu Server 11.10安裝配置lamp(Apache+MySQL+PHP),需要的朋友可以參考下2016-10-10嵌入式Linux開發(fā)環(huán)境搭建ping、nfs的解決方法
在本篇文章里小編給大家整理了關(guān)于嵌入式Linux開發(fā)環(huán)境搭建ping、nfs的解決方法,需要的朋友們學(xué)習(xí)參考下。2019-07-07最新評論