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