ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 概述 始终检查返回值并提供有用的返回值 ## 简单判断 ``` >cat a.sh #!/bin/bash rm 123 || exit 1 echo "success" > touch 123 > bash a.sh success > bash a.sh rm: 无法删除"123": 没有那个文件或目录 ``` 通过 || 符号判断上一条命令是否成功 ## 失败时组合输出 ``` rm 123 || ( echo "rm 123 失败" && exit 1 ) // 错误方式,不带括号,exit1 都会执行 rm 123 || echo "rm 123 失败" && exit 1 ``` 使用 `()` 进行组合 **case 的特殊情况** 1. 如果在case 中 不使括号,则可以正常退出 如` echo "失败" && exit 1` 2. 使用带括号的 exit 不会让整个程序停止,如 `rm 123 || ( echo "失败" && exit 1 )` ``` export A="b" case $A in "a") # rm 123 || (echo "bb" && exit 1); //不会停止 rm 123 ;; esac if (( $?!=0 ));then echo "编译失败"; exit 1; fi echo "end" ``` ### 非管道的简单命令 ``` // 方式一:命令直接写在命令一 if ! mv "${file_list[@]}" "${dest_dir}/"; then echo "Unable to move ${file_list[*]} to ${dest_dir}" >&2 exit 1 fi // 方式一: 使用 $? 获取上次命令执行结果 mv "${file_list[@]}" "${dest_dir}/" if (( $? != 0 )); then echo "Unable to move ${file_list[*]} to ${dest_dir}" >&2 exit 1 fi ``` ### 管道命令 如果仅需要判断整个管道符的 ``` tar -cf - ./* | ( cd "${dir}" && tar -xf - ) if (( PIPESTATUS[0] != 0 || PIPESTATUS[1] != 0 )); then echo "Unable to tar files to ${dir}" >&2 fi ``` 对每个管道符进行判断 ``` tar -cf - ./* | ( cd "${DIR}" && tar -xf - ) return_codes=( "${PIPESTATUS[@]}" ) // 注意使用 (( 而非 [[ 判断,因为 [ 也是一个命令 if (( return_codes[0] != 0 )); then do_something fi if (( return_codes[1] != 0 )); then do_something_else fi ```