網站首頁 編程語言 正文
前言
shell腳本是一種腳本語言,他不需要編譯,而是直接通過解釋器,將腳本作為解釋器程序的參數運行的。
我們通過編寫vim test.sh,然后用不同方法執行名為test.sh的腳本。
#!/bin/bash
echo "hello word"
概述
1)使用絕對路徑執行。
2)使用相對路徑執行。語法格式:./a.sh
3)使用 sh或bash命令來執行。語法格式: sh a.sh 不需要執行權限 -x參數(顯示執行過程)
4)使用 . (空格)腳本名稱來執行。 語法格式:. a.sh 不需要執行權限(特別注意:第一個.后面有空格)
5)使用 source 來執行。 語法格式:source a.sh 不需要執行權限(主要用于生效配置文件)
下面針對這5種方式,我們一起來看看它們的具體使用方式和區別吧!
正題
一、方式1絕對路徑和方式2相對路徑,可以歸納為同一種方法
注意:新創建的腳本,默認沒有x執行權限,需要給它用#chmod +x test.sh的方式,添加執行權限。在生產環境中不要輕易的給文件可執行權限;
[root@centOS7 shell]# /root/test/shell/test.sh #使用絕對路徑
hello word
[root@centOS7 shell]# ./test.sh #使用相對路徑
二、方式3使用 sh/bash命令來執行
注意:該方式雖然不需要手動給腳本添加x執行權限,但是它會改變腳本默認解釋器類型。比如說:腳本首行定義的是#!/bin/bash,使用該方式,它會給你改用/bin/sh解釋器,也就說,最終效果=#!/bin/bash --posix
特別之處:該方式1.不需單獨給腳本分配x執行權限;2.甚至都不需要在腳本首行聲明腳本解釋器類型,因為腳本是被當做該命令的參數使用的。
注:你可能會對/bin/bash和/bin/sh的區別感興趣,點擊這里。
ls
chomod -x test.sh #給腳本移除x執行權限
ls
sh test.sh #第3種方式運行
bash test.sh #第3種方式運行
三、方式4使用 . (空格)腳本名稱來執行
注:該方式,不需要單獨添加x執行權限,它和source類似,權限繼承與bash。
ls #查看腳本(灰色的,說明沒有x可執行權限)
. test.sh #注意,點后面有個空格
四、方式5使用 source 來執行(主要用于生效配置文件)
ls #查看腳本(灰色的,說明沒有x可執行權限)
source test.sh #該方式多用些操作,被修改后的配置文件(使之重新加載)
注意:?
.和source的權限,繼承的是/bin/bash的權限,在執行時也是將test.sh作為參數,并不需要test.sh有執行權限;和bash執行不一樣的是,source和.不會創建子進程,是在當前shell進程下執行的,因為他們是內建命令,所以腳本中賦值的本地變量也會影響當前shell的,用的時候一定要注意(盡量使用前面的3種方式)。
區別
1.關于執行權限
僅前兩種(相對路徑、絕對路徑)方法,需要chmod +x test.sh,給腳本單獨添加x執行權限。后三種方法,均不需要單獨添加x執行權限。
2.關于是否開啟子shell線程
前三種方法,腳本執行時會開啟一個子shell環境,在子shell執行完后,子shell環境隨即關閉,然后又回到當前shell中。
后面兩種. 和source方式,則是在當前shell中執行,不會開啟子shell。
總結?
原文鏈接:https://blog.csdn.net/succing/article/details/122450831
相關推薦
- 2022-06-01 分享Python?加速運行技巧_python
- 2022-04-11 git項目初次push提示error: failed to push some refs to ht
- 2022-11-18 React中用@符號編寫文件路徑實現方法介紹_React
- 2022-10-16 基于epoll的多線程網絡服務程序設計_C 語言
- 2023-04-24 一文掌握python中的__init__的意思及使用場景分析_python
- 2022-09-12 輕量級域名解析服務器之dnsmasq的介紹與部署_服務器其它
- 2022-03-24 postman接口做關聯測試的方法步驟_相關技巧
- 2022-01-31 jq監聽input type="file"發生改變,即選擇文件,并獲取文件名稱
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支