notes/IT/Scripting.md
2024-05-30 18:09:46 -06:00

5.4 KiB
Raw Blame History

Marking a script as executable

Sometimes, you may need to mark a script as an executable to run it. On Linux, this can be accomplished by chmod +x [FILE], where [FILE] is the file you want to mark as executable. To unmark a file as executable, use chmod -x

The Shebang

There are various shells with their own language syntax (sh, bash, fish, etc). Therefore, more complicated scripts will indicate a particular shell by specifying the absolute path to the interpreter as the first line, prefixed by #! like this:

#!/bin/sh
echo "Hello, World!"

#!/bin/sh means that this script can be executed by the binary located at /bin/sh, and so the reader knows this is a sh(ell) script.

Variables

In bash, variable assignment is done with the = operator. Variables are conventionally named with SCREAMING_SNAKE_CASE, and can be accessed by prefixing the variable name with a dollar sign ($):

#!/bin/bash
# There may not be any spaces used during assignment, `A = B` means something different than `A=B`
# Assignment is done with the equal sign (=) operator:
MY_VARIABLE="Hi Mom!"
echo $MY_VARIABLE

Quotes

In Bash, different styles of quotes (or a backtick) mean different things:

Quote Description
Single Quotes (') Enclosing characters in single quotes (') preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash. Commands in single quotes will not be evaluated.
Double Quotes (") Enclosing characters in double quotes (") preserves the literal value of all characters within the quotes, with the exception of $, `, \, and, when history expansion is enabled, !. The characters $ and \ retain their special meaning within double quotes. A double quote may be quoted within double quotes by preceding it with a backslash. When the shell is in POSIX mode (see Bash POSIX Mode), the ! has no special meaning within double quotes, even when history expansion is enabled.

Within double quotes, substitution can be done using $().

<br>"Output of ls: $(ls)"<br>
Backtick (`) While a backtick is not technically a quotation mark, it's included here. Backticks are used to substitute the output a command in a location:
<br>sudo chown `id -u` /some/directory<br>

Conditionals

A basic if statement in bash looks like this:

if somecommand; then
	# The code here will be run if somecommand has an exit code of 0
fi

Note that the if statement is terminated by fi. This is fairly standard throughout bash scripting, where the blocks are closed with the reverse text used to open them.

You can also make use of else for more complex conditional logic:

if somecommand; then
  # If the command succeed
else
  echo root is missing from the password file
fi

Commands

Command Description
exit [CODE] Make the script process exit, where [CODE] is the exit code the process will terminate with.
read [VARIABLE] Read user input into the provided variable.