# BASH Challenges These are examples of scripting challenges I was given and helped create for interviewees --- 1. Check for the presence of a directory and create it if it doesn't exist Example Solution ```bash devdir="/mnt/sqlback1/LSQLSHARE01DEV" if [[ ! -d "${devdir}" ]]; then echo "${devdir} not found." # Create Directory mkdir -p "${devdir}" fi ``` 2. Given a threshold, determine if a given directory size is over the threshold. Example Solution ```bash dir="/mnt/data2/backups" threshold="100000000" # 100GB dirsize=$(/usr/bin/du -s ${dir} | awk '{print $1}') if [[ $dirsize -gt $threshold ]]; then echo "Threshold Exceeded" /usr/bin/du -hs "${dir}" fi ``` 3. Create and loop over an associative array. Ex. create an array of services and ports then print them Example Solution ```bash # Declare service names and ports in an array declare -A services=( [apache_http]=80 [apache_https]=443 [ssh]=22 [telnet]=23 ) # Iterate over services and ports for p in "${!services[@]}"; do echo -e "Service: ${p} \t Port ${services[$p]}" done ``` Example Output: ``` Service: apache_https Port 443 Service: telnet Port 23 Service: ssh Port 22 Service: apache_http Port 80 ``` 4. Write a short script that displays the numbers 2 through 128 in brackets (even numbers only, as seen below). ``` [2] [4] [8] [16] [32] [64] [128] ``` Example Solution ```bash i=1; while [ $i -lt 65 ]; do let i=$((i+i)); print "[$i]"; done``` ``` Example Output ``` [2] [4] [8] [16] [32] [64] [128] ``` 5. Write a script that, for each number from 1 to 100, prints a comma-delimited list of numbers in descending order from the current number to 1. Each list should be shown on a separate line as seen below. ``` 1 2,1 3,2,1 4,3,2,1 ... 100,99,...,1 ``` Example Solution (from 10 to save space). (OK, I cheated shaving off the trailing comma.) ```bash echo "1"; for x in {2..10}; do for i in {$x..2}; do echo -n $i,; done; echo -n "1"; echo ""; done ``` Best Solution: ```bash for (( i=1;i<=10;i++ )); do eval printf -- '%d\\n' "{${i}..1}" | paste -sd ',' -;done ``` Example Output ``` 1 2,1 3,2,1 4,3,2,1 5,4,3,2,1 6,5,4,3,2,1 7,6,5,4,3,2,1 8,7,6,5,4,3,2,1 9,8,7,6,5,4,3,2,1 10,9,8,7,6,5,4,3,2,1 ``` Tags: howto