面试题答案
一键面试- 处理命令执行失败但不影响后续依赖命令正常执行:
- 在调用外部命令时,使用
|| true
结构。例如,如果脚本中有命令command1
,正常调用是command1
,要使其执行失败不影响后续命令,可以改为command1 || true
。这样,即使command1
执行失败(返回非零退出状态),脚本也会继续执行后续命令。 - 另一种方法是在函数中处理。将每个命令封装在一个函数里,在函数内部对命令的执行状态进行判断,如果失败可以选择合适的处理方式,比如记录错误日志但继续执行其他函数。示例如下:
function run_command1 { command1 local status=$? if [ $status -ne 0 ]; then echo "command1 failed" # 可以在这里进行更详细的错误处理,如记录日志等 fi return $status }
- 在调用外部命令时,使用
- 优化日志记录:
- 记录执行时间:
- 可以在脚本开始和每个命令执行前后记录时间。在脚本开始处获取起始时间:
start_time=$(date +%s%N)
- 在命令执行前获取命令开始时间,执行后获取结束时间并计算时间差。例如对于
command1
:
command1_start_time=$(date +%s%N) command1 command1_end_time=$(date +%s%N) command1_time=$(( (command1_end_time - command1_start_time) / 1000000 )) echo "command1 executed in ${command1_time} ms"
- 记录脚本执行状态:
- 在每个命令执行后,通过检查命令的退出状态来记录状态。如对于
command1
:
command1 if [ $? -eq 0 ]; then echo "command1 executed successfully" >> script.log else echo "command1 failed" >> script.log fi
- 在每个命令执行后,通过检查命令的退出状态来记录状态。如对于
- 综合日志记录:
- 可以将执行时间和执行状态综合记录在日志文件中。例如:
command1_start_time=$(date +%s%N) command1 command1_end_time=$(date +%s%N) command1_time=$(( (command1_end_time - command1_start_time) / 1000000 )) if [ $? -eq 0 ]; then echo "$(date): command1 executed successfully in ${command1_time} ms" >> script.log else echo "$(date): command1 failed after ${command1_time} ms" >> script.log fi
- 记录执行时间: