[Bash] Error handling

Zhentiw發表於2024-05-23

Error handling in Bash can be managed using exit statuses and traps.

  • Every commands in Bash returns an exit status (0 for success, non-zero for failure).
  • You can use $? variable to get the exist status of the last executed command.

Exit Statuses

#!/bin/zsh

ls /nonexistent_directory
if [ $? -ne 0 ]; then
  echo "Command failed."
fi

Traps

The trap command allows you to catch signals and errors to clean up before the script exits.

trap 'commands' signal

#!/bin/zsh

trap 'echo "Caught SIGINT signal. Exiting..."; exit 1' SIGINT

while true; do
  echo "Press Ctrl+C to exit..."
  sleep 1
done

Explanation:

  • trap 'commands' signal: Defines a trap for a specific signal.
  • SIGINT: The interrupt signal (typically sent by pressing Ctrl+C).

Practice

#!/bin/zsh

check_file() {
  if [ -f "$1" ]; then
    echo "File $1 exists."
  else
    echo "File $1 does not exist."
    return 1
  fi
}

check_file "myfile.txt"
if [ $? -ne 0 ]; then
  echo "Error: File not found."
fi

相關文章