在Linux中执行shell(bash)脚本的方法 2208笔记
用source命令执行脚本文件时,是在当前Shell进程中执行,而不是像./与sh方式一样在新的Shell进程中执行,因此早先设置的变量在脚本里是可以读取到的。source是Shell(准确地说是Bash)的内置命令,在Bourne Shell中的等价命令是一个点.,即点命令。后, 就能在任意文件夹, 像执行命令一样, 直接输入脚本名就能执行 , 会在子Shell中执行。按路径直接执行,需要脚本文
在Linux中执行shell(bash)脚本的方法
在Linux中执行shell(bash)脚本的方法可分为
- 路径直接执行
- 用
sh
或bash
命令执行 - 用点
.
或source
命令执行
路径直接执行和用用 sh
或 bash
会新开子shell来执行脚本
用点 .
或 source
命令直接在当前shell执行脚本
文章目录
演示用脚本
假设在 /MyBashs/ 有脚本 BashScript001.sh , 全路径名: /MyBashs/BashScript010.sh
sudo mkdir -p /MyBashs/
cd /MyBashs/
sudo vi /MyBashs/BashScript010.sh
sudo mkdir -p /MyBashs/ ; cd /MyBashs/ ; sudo vi /MyBashs/BashScript010.sh
脚本头
#!/bin/bash
经测试, 有没有脚本头 ,都可以执行
echo '$!'=$!
echo '$?'=$?
echo '$-='$-
echo '$$='$$
echo '$@='$@
echo '$*'=$*
echo '$%='$%
echo '$0='$0
echo '$#='$#
echo '$1='$1
echo '$2='$2
echo '$3='$3
echo '$4='$4
echo '$5='$5
printf '$6='"$6\n"
printf '$7='"$7\n"
echo '$8='"$8"
echo '$9='"$9"
echo '$10'=$10
echo '$11'=$11
echo '$12='$123456789
echo '$13='${13}
echo '$14='$14
echo '$15='"${15}"
echo '$16='$16
echo '$17='${17}
echo '$18'=${18}
echo '$19'=${19}
echo '$20'=${20}
echo '$21'=${21}
echo '$22='=${22}
路径执行
按路径直接执行,需要脚本文件有可执行权限, 一般自己创建的文件有读写权限,但没有可执行权限
可以用sudo chmod 777 文件路径全名
开启文件全部权限
开启文件可执行权限的方法
sudo chmod 777
文件路径全名
777
等效a=rwx
等效ugo=rwx
等效augo=rwx
等效a+rwx
等效ugo+rwx
等效augo+rwx
等效ugao+xrw
sudo chmod 775
文件路径全名sudo chmod u+x
文件路径全名sudo chmod g+x
文件路径全名sudo chmod o+x
文件路径全名sudo chmod a+x
文件路径全名sudo chmod +x
文件路径全名sudo chmod ugo+x
文件路径全名sudo chmod ugoa+x
文件路径全名sudo chmod a+x
等效sudo chmod ugo+x
等效sudo chmod augo+x
等效sudo chmod +x
sudo chmod u=rwx,g=rwx,o=x
文件路径全名sudo chmod ug=xrw,o=x
文件路径全名
绝对路径执行
/MyBashs/BashScript010.sh
相对路径执行
相对路径执行就是进到脚本所在文件夹, 然后 ./脚本
cd /MyBashs
./BashScript010.sh
配置路径环境变量PATH
执行
配置PATH
后, 就能在任意文件夹, 像执行命令一样, 直接输入脚本名就能执行 , 会在子Shell中执行
配置环境变量中的PATH
变量的方法
PATH
包含多个路径 , 分隔符是:
冒号- 系统会在
PATH
包含的路径中搜索命令 , 能搜索到才会执行. .
点表示当前目录PATH
在每个Shell进程中是独立的,互不影响- 加
export
后, 每新开一个Shell(bash), 都会复制一个父Shell的PATH
到子Shell中, 因为 “路径执行” 和 “sh或bash执行” 都会新开一个子Shell去运行脚本, 如果不加export
, 则对PATH
的修改,在子Shell中不会起作用.
export
只是复制变量到子Shell, 在子Shell中对同名变量的修改不会影响到父Shell的同名变量
配置临时配置环境变量
export PATH=$PATH:.
export PATH=$PATH:/MyBashs
或
export PATH=$PATH:.:/MyBashs
加上双引号更保险
export PATH="$PATH:."
export PATH="$PATH:/MyBashs"
export PATH="$PATH:.:/MyBashs"
这样修改的变量,在退出登录时就会失效
配置本用户的长期环境变量,
将上面对变量的修改写入 /etc/bashrc
或者 ~/.bashrc
str=":\/MyBashs" ;\
fileName='/etc/bashrc';
[ -f $fileName.bak ] || cp -a $fileName ${fileName}.bak;
[[ `cat $fileName` == *$str* ]] && ( echo "$fileName文件中,已存在 $str 所以无需设置" ) || (echo "在 $fileName 中加入了 $str") ; echo $PATH ;
unset str; unset fileName;
[[ `cat /etc/bashrc` = */MyBashs* ]] || echo "export PATH=$PATH:/MyBashs" >> ~/.bashrc
用 sh
或 bash
命令执行
用 sh
或 bash
命令会新开shell执行
在脚本文件夹时可用
sudo bash BashScript010.sh
或
sudo sh BashScript010.sh
或
sudo bash ./BashScript010.sh
或
sudo sh ./BashScript010.sh
不在脚本文件夹时可用全路径
sudo bash /MyBashs/BashScript010.sh
或
sudo sh /MyBashs/BashScript010.sh
用点 .
或 source
命令执行
.
和 source
会直接在本shell执行, 不会新开子shell
source是Shell(准确地说是Bash)的内置命令,在Bourne Shell中的等价命令是一个点.,即点命令。
用source命令执行脚本文件时,是在当前Shell进程中执行,而不是像./与sh方式一样在新的Shell进程中执行,因此早先设置的变量在脚本里是可以读取到的
source
(从 C Shell 而来)是bash shell的内置命令.
点命令来自 Bourne Shell , 是source的另一种写法(等价)
在脚本文件夹时可用
sudo source BashScript010.sh
或
sudo . BashScript010.sh
或
sudo source ./BashScript010.sh
或
sudo . ./BashScript010.sh
不在脚本文件夹时可用全路径
sudo source /MyBashs/BashScript010.sh
或
sudo . /MyBashs/BashScript010.sh
更多推荐
所有评论(0)