====== Bash ====== The **__B__ourne __A__gain __Sh__ell** is the default command language / shell in [[Linux]], and I've never bothered to try any other. You type stuff in (or paste it from stackexchange...) and useful stuff happens. ===== Features ===== ==== Arguments ==== You can use [[getopts]] to read arguments attached to the command. You use a ''while'' loop and a ''case'' statement to figure out what to do with the arguments/flags entered. In this example you can use ''-i'' and ''-o'' arguments to specify file names and they will be stored in variables ''input'' and ''output''. while getopts :io flag do case $flag in i) input=${OPTARG} ;; o) output=${OPTARG} ;; esac done ==== Conditional Constructs ==== === if === -n string True if the length of string is non-zero. -a file True if file exists. DPMT USE -a, it's weird In the documentation of test you will also see a the switch -e. This switch tests the following argument and evaluates to true if that argument is a file or directory that exists. More useful still is the -f switch which evaluates to true if the following argument exists and is a regular file (as opposed to a directory or a block device, or whatever). === case === ===== Examples ===== ==== Randomised file names ==== * https://askubuntu.com/questions/1107016/how-to-change-names-of-files-in-a-directory-to-random-generated-names for file in *.jpeg; do mv -- "$file" "$RANDOM.jpeg" done for file in *.jpeg; do mv -- "$file" "$(mktemp --dry-run XXXXXXXX.jpeg)" done ==== Move all files in subdirectories to parent ==== * https://unix.stackexchange.com/questions/358284/move-all-files-inside-sub-folders-to-parent-folder find . -mindepth 2 -type f -print -exec mv {} . \; ==== See Also ==== Bash examples elsewhere on the wiki: * [[ffmpeg]] * [[imagemagick]] * [[tumbler]] ===== See Also ===== * [[wp>Bash (Unix shell)]] * [[https://www.gnu.org/software/bash/|GNU Bash]] - Homepage {{tag>guide language Linux}}