diff --git a/linux-bash/read/src/main/bash/file.csv b/linux-bash/read/src/main/bash/file.csv new file mode 100644 index 0000000000..69a50772ab --- /dev/null +++ b/linux-bash/read/src/main/bash/file.csv @@ -0,0 +1 @@ +car,car model,car year,car vin;Mercury,Grand Marquis,2000,2G61S5S33F9986032;Mitsubishi,Truck,1995,SCFFDABE1CG137362;Ford,Mustang,1968,2G4WS55J351278031;Ford,Crown Victoria,1996,4T1BK1EB8EU586249;GMC,Envoy,2004,WVGEF9BP3FD720618; diff --git a/linux-bash/read/src/main/bash/read_inputs.sh b/linux-bash/read/src/main/bash/read_inputs.sh new file mode 100755 index 0000000000..30eb598ac3 --- /dev/null +++ b/linux-bash/read/src/main/bash/read_inputs.sh @@ -0,0 +1,122 @@ +#!/bin/bash + +# section 2.1 +default_read(){ + read input1 input2 input3 + echo "[$input1] [$input2] [$input3]" +} + +# section 2.2 +custom_ifs_no_array(){ + OLDIFS=$IFS + IFS=";" + read input1 input2 input3 + echo "[$input1] [$input2] [$input3]" + # restore default IFS after we're finished so current shell behaves like before + IFS=$OLDIFS +} + +# Section 2.3 +prompt_read_password(){ + prompt="You shall not pass:" + read -p "$prompt" -s input + echo -e "\ninput password [$input]" +} + +array_read(){ + declare -a input_array + text="baeldung is a cool tech site" + read -e -i "$text" -a input_array + for input in ${input_array[@]} + do + echo " word [$input]" + done +} + +# section 3.1 +file_read(){ + exec {file_descriptor}<"./file.csv" + declare -a input_array + delimiter=";" + while IFS="," read -a input_array -d $delimiter -u $file_descriptor + do + echo "${input_array[0]},${input_array[2]}" + done + exec {file_descriptor}>&- +} + +# section 3.2 +command_pipe(){ + ls -ll / | { declare -a input + read + while read -a input; + do + echo "${input[0]} ${input[8]}" + done } +} + +# section 3.3 +timeout_input_read(){ + prompt="You shall not pass:" + read -p "$prompt" -s -r -t 5 input + if [ -z "$input" ]; then + echo -e "\ntimeout occured!" + else + echo -e "\ninput word [$input]" + fi +} + +exactly_n_read(){ + prompt="Reading exactly 11 chars:" + read -p "$prompt" -N 11 -t 5 input1 input2 + echo -e "\ninput word1 [$input1]" + echo "input word2 [$input2]" +} + +# main menu entry point +echo "****Read command samples menu*****" +PS3="Your choice (1,2,3 etc.):" +options=("default_read" "custom_ifs_no_array" "prompt_read_password" \ + "array_read" "file_read" "command_pipe" "timeout_input_read" \ + "exactly_n_read" "quit") +select option in "${options[@]}" +do + case $option in + "default_read") + echo "Enter something separated by spaces" + default_read + ;; + "custom_ifs_no_array") + echo "Enter something separated by ;" + custom_ifs_no_array + ;; + "prompt_read_password") + echo "Enter an invisible password after the prompt" + prompt_read_password + ;; + "array_read") + echo "Enter something else or just return" + array_read + ;; + "file_read") + echo "Reading from one liner csv file" + file_read + ;; + "command_pipe") + echo "Listing files and access rights from /" + command_pipe + ;; + "timeout_input_read") + echo "Enter something in 5 seconds or less" + timeout_input_read + ;; + "exactly_n_read") + echo "Enter at least 11 characters or wait 5 seconds" + exactly_n_read + ;; + "quit") + break + ;; + *) echo "Invalid option";; + esac +done \ No newline at end of file