bash脚本语法总结
1. 从一个脚本调用另一个脚本
#!/bin/bash
SCRIPT_PATH="/path/to/script.sh"
# Here you execute your script
"$SCRIPT_PATH"
# or
. "$SCRIPT_PATH"
# or
source "$SCRIPT_PATH"
# or
bash "$SCRIPT_PATH"
# or
eval '"$SCRIPT_PATH"'
# or
OUTPUT=$("$SCRIPT_PATH")
echo $OUTPUT
# or
OUTPUT=`"$SCRIPT_PATH"`
echo $OUTPUT
# or
("$SCRIPT_PATH")
# or
(exec "$SCRIPT_PATH")
答案来源:https://stackoverflow.com/questions/8352851/shell-how-to-call-one-shell-script-from-another-shell-script
2. eval与exec
从 man bash 中查到
eval [arg ...]
              The  args  are read and concatenated together into a single com‐
              mand.  This command is then read and executed by the shell,  and
              its  exit status is returned as the value of eval.  If there are
              no args, or only null arguments, eval returns 0.
exec [-cl] [-a name] [command [arguments]]
              If command is specified, it replaces the shell.  No new  process  (NOTE: exec分情况,有时候替换shell,有时候不替换)
              is  created.  The arguments become the arguments to command.  If
              the -l option is supplied, the shell places a dash at the begin‐
              ning of the zeroth argument passed to command.  This is what lo‐
              gin(1) does.  The -c option causes command to be  executed  with
              an  empty environment.  If -a is supplied, the shell passes name
              as the zeroth argument to the executed command.  If command can‐
              not  be executed for some reason, a non-interactive shell exits,
              unless the execfail shell option is enabled.  In that  case,  it
              returns  failure.   An  interactive shell returns failure if the
              file cannot be executed.  A subshell  exits  unconditionally  if
              exec  fails.  If command is not specified, any redirections take
              effect in the current shell, and the return  status  is  0.   If
              there is a redirection error, the return status is 1.
3. ${} 和 $()
$():里面应该放命令
${}:里面放变量
$((算术式)):里面放算术式(NOTE:做算术表达式时必须用这个,否则会变成字符串连接)
资料来源:https://blog.csdn.net/weixin_42665725/article/details/116869527
在$()里面放命令,再用双引号包住$(),可以把命令的返回结果作为一个字符串进行其它操作
 #!/bin/bash
 marco(){
     echo "$(pwd)" > $HOME/marco_history.log
     echo "save pwd $(pwd)"
 }
 polo(){
     cd "$(cat "$HOME/marco_history.log")"
 }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号