Bash Scripting

‘\r’: command not found - .bashrc / .bash_profile [duplicate]

When all else fails in Cygwin…

Try running the dos2unix command on the file in question.

It might help when you see error messages like this:

-bash: '\r': command not found

Windows style newline characters can cause issues in Cygwin.

The dos2unix command modifies newline characters so they are Unix / Cygwin compatible.

CAUTION: the dos2unix command modifies files in place, so take precaution if necessary.

If you need to keep the original file, you should back it up first.

Note for Mac users: The dos2unix command does not exist on Mac OS X.

Check out this answer for a variety of solutions using different tools.

There is also a unix2dos command that does the reverse:

It modifies Unix newline characters so they’re compatible with Windows tools.

If you open a file with Notepad and all the lines run together, try unix2dos filename.

Source: ‘\r’: command not found - .bashrc / .bash_profile [duplicate]

How To Set Environment Variable in Bash

export VAR="my value"
echo $VAR
printenv VAR

Source: How To Set Environment Variable in Bash

Index a String in bash

${string:position}

Extracts substring from $string at $position.

If the $string parameter is “*” or “@”, then this extracts the positional parameters, starting at $position.

${string:position:length} Extracts $length characters of substring from $string at $position.

Source: Index a String in bash

Extract substring in Bash

You can use Parameter Expansion to do this.

If a is constant, the following parameter expansion performs substring extraction:

b=${a:12:5}

echo that outputs to stderr

>&2 echo "error"

Source: echo that outputs to stderr

Linux bash exit status and how to set exit status in bash

Exit Code Description
0 Success
1 Operation not permitted
2 No such file or directory
3 No such process
4 Interrupted system call
5 Input/output error
6 No such device or address
7 Argument list too long
8 Exec format error
9 Bad file descriptor
10 No child processes
11 Resource temporarily unavailable
12 Cannot allocate memory
13 Permission denied
14 Bad address
15 Block device required
16 Device or resource busy
17 File exists
18 Invalid cross-device link
19 No such device
20 Not a directory
21 Is a directory
22 Invalid argument
23 Too many open files in system
24 Too many open files
25 Inappropriate ioctl for device
26 Text file busy
27 File too large
28 No space left on device
29 Illegal seek
30 Read-only file system
31 Too many links
32 Broken pipe
33 Numerical argument out of domain
34 Numerical result out of range
35 Resource deadlock avoided
36 File name too long
37 No locks available
38 Function not implemented
39 Directory not empty
40 Too many levels of symbolic links
42 No message of desired type
43 Identifier removed
44 Channel number out of range
45 Level 2 not synchronized
46 Level 3 halted
47 Level 3 reset
48 Link number out of range
49 Protocol driver not attached
50 No CSI structure available
51 Level 2 halted
52 Invalid exchange
53 Invalid request descriptor
54 Exchange full
55 No anode
56 Invalid request code
57 Invalid slot
59 Bad font file format
60 Device not a stream
61 No data available
62 Timer expired
63 Out of streams resources
64 Machine is not on the network
65 Package not installed
66 Object is remote
67 Link has been severed
68 Advertise error
69 Srmount error
70 Communication error on send
71 Protocol error
72 Multihop attempted
73 RFS specific error
74 Bad message
75 Value too large for defined data type
76 Name not unique on network
77 File descriptor in bad state
78 Remote address changed
79 Can not access a needed shared library
80 Accessing a corrupted shared library
81 .lib section in a.out corrupted
82 Attempting to link in too many shared libraries
83 Cannot exec a shared library directly
84 Invalid or incomplete multibyte or wide character
85 Interrupted system call should be restarted
86 Streams pipe error
87 Too many users
88 Socket operation on non-socket
89 Destination address required
90 Message too long
91 Protocol wrong type for socket
92 Protocol not available
93 Protocol not supported
94 Socket type not supported
95 Operation not supported
96 Protocol family not supported
97 Address family not supported by protocol
98 Address already in use
99 Cannot assign requested address
100 Network is down
101 Network is unreachable
102 Network dropped connection on reset
103 Software caused connection abort
104 Connection reset by peer
105 No buffer space available
106 Transport endpoint is already connected
107 Transport endpoint is not connected
108 Cannot send after transport endpoint shutdown
109 Too many references
110 Connection timed out
111 Connection refused
112 Host is down
113 No route to host
114 Operation already in progress
115 Operation now in progress
116 Stale file handle
117 Structure needs cleaning
118 Not a XENIX named type file
119 No XENIX semaphores available
120 Is a named type file
121 Remote I/O error
122 Disk quota exceeded
123 No medium found
125 Operation canceled
126 Required key not available
127 Key has expired
128 Key has been revoked
129 Key was rejected by service
130 Owner died
131 State not recoverable
132 Operation not possible due to RF-kill
133 Memory page has hardware error

Source: Linux bash exit status and how to set exit status in bash

Shell Script : How to check if variable is null or no

if [[ "$is_always_execute" == null ]];
then
    is_always_execute=false;
fi
if [[ -n "$list_Data" ]]
then
    echo "not Empty"
else
    echo "empty"
fi
if [[ -z "$list_Data" ]]
then
  echo "Empty"
else
  echo "Not empty"
fi

Source: Shell Script : How to check if variable is null or no

While loop

while [ condition ]
do
   command1
   command2
   command3
done

Source: Bash While Loop Examples

Sleep

sleep <n_SECONDS>

eg. sleep 1 - sleep for 1 second

Compare Strings in Bash

Example-1: String Comparison using “==” operators

#!/bin/bash

strval1="Ubuntu"
strval2="Windows"

#Check equality two string variables

if [ $strval1 == $strval2 ]; then
  echo "Strings are equal"
else
  echo "Strings are not equal"
fi

#Check equality of a variable with a string value

if [ $strval1 == "Ubuntu" ]; then
  echo "Linux operating system"
else
  echo "Windows operating system"
fi

Example-2: String Comparison using “!=” operator

#!/bin/bash

strval1="Ubuntu"
strval2="Windows"

#Check inequality of a variable with a string value

if [ $strval2 != "Ubuntu" ]; then
  echo "Windows operating system"
else
  echo "Linux operating system"
fi

Example-3: Partial String Comparison

#!/bin/bash

strval="Microsoft Internet Explorer"

if [[ $strval == *Internet* ]];
then
  echo "Partially Match"
else
  echo "No Match"
fi

if [[ $strval == *internet* ]];
then
  echo "Partially Match"
else
  echo "No Match"
fi

Example-4: Compare string with user input value

#!/bin/bash

echo "Enter Your Name"
read input

if [ $input != "Fahmida" ];
then
  echo "No Record Found"
else
  echo "Record Found"
fi

Source: How to compare strings in Bash

Create a bash script

Place a shebang at the top of the script

#!/bin/bash

Running a bash script

Use:

bash scriptname.sh

instead of:

sh scriptname.sh

if..else Statement

if statement

if TEST-COMMAND
then
  STATEMENTS
fi

if else statement

if TEST-COMMAND
then
  STATEMENTS1
else
  STATEMENTS2
fi

if..elif..else

if TEST-COMMAND1
then
  STATEMENTS1
elif TEST-COMMAND2
then
  STATEMENTS2
else
  STATEMENTS3
fi

nested if

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]]
then
  if [[ $VAR1 -ge $VAR3 ]]
  then
    echo "$VAR1 is the largest number."
  else
    echo "$VAR3 is the largest number."
  fi
else
  if [[ $VAR2 -ge $VAR3 ]]
  then
    echo "$VAR2 is the largest number."
  else
    echo "$VAR3 is the largest number."
  fi
fi

multiple conditions

#!/bin/bash

echo -n "Enter the first number: "
read VAR1
echo -n "Enter the second number: "
read VAR2
echo -n "Enter the third number: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
  echo "$VAR1 is the largest number."
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
  echo "$VAR2 is the largest number."
else
  echo "$VAR3 is the largest number."
fi

Below are some of the most commonly used operators:

  • -n VAR - True if the length of VAR is greater than zero.
  • -z VAR - True if the VAR is empty.
  • STRING1 = STRING2 - True if STRING1 and STRING2 are equal.
  • STRING1 != STRING2 - True if STRING1 and STRING2 are not equal.
  • INTEGER1 -eq INTEGER2 - True if INTEGER1 and INTEGER2 are equal.
  • INTEGER1 -gt INTEGER2 - True if INTEGER1 is greater than INTEGER2.
  • INTEGER1 -lt INTEGER2 - True if INTEGER1 is less than INTEGER2.
  • INTEGER1 -ge INTEGER2 - True if INTEGER1 is equal or greater than INTEGER2.
  • INTEGER1 -le INTEGER2 - True if INTEGER1 is equal or less than INTEGER2.
  • -h FILE - True if the FILE exists and is a symbolic link.
  • -r FILE - True if the FILE exists and is readable.
  • -w FILE - True if the FILE exists and is writable.
  • -x FILE - True if the FILE exists and is executable.
  • -d FILE - True if the FILE exists and is a directory.
  • -e FILE - True if the FILE exists and is a file, regardless of type (node, directory, socket, etc.).
  • -f FILE - True if the FILE exists and is a regular file (not a directory or device).

Source: Bash if..else Statement

How to Evaluate Strings as Numbers in Bash

To convert strings to integers in bash, wrap them in $((X)). Like this:

$((string))

What is .bashrc file in Linux?

Source: https://www.digitalocean.com/community/tutorials/bashrc-file-in-linux

How to Create and Use Alias Command in Linux

alias shortName="your custom command here"

Creating Permanent Aliases

vim ~/.bashrc
#My custom aliases
alias home=”ssh -i ~/.ssh/mykep.pem tecmint@192.168.0.100”
alias ll="ls -alF"
source ~/.bashrc

Source: https://www.tecmint.com/create-alias-in-linux/

The set builtin

  • https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html

bash : Bad Substitution

Make sure your script didnt have

#!/bin/sh

at the top of your script. Instead, you should add

#!/bin/bash

https://stackoverflow.com/questions/20615217/bash-bad-substitution

Understanding Exit Codes and Using them in Bash scripts

  • https://madflojo.medium.com/understanding-exit-codes-in-bash-6942a8b96ce5