mirror of
https://github.com/Hizenberg469/Makefile-tutorial.git
synced 2026-04-19 22:02:24 +03:00
Basic scripting is done
This commit is contained in:
@@ -461,3 +461,202 @@
|
||||
|--------------------|
|
||||
|
||||
|
||||
-> For loops
|
||||
|
||||
for arg in [list]
|
||||
do
|
||||
command(s)..
|
||||
done
|
||||
|
||||
* Example
|
||||
for PLANET in "Mercury Venus Earth"
|
||||
do
|
||||
echo $PLANET
|
||||
done
|
||||
|
||||
for file in *.txt
|
||||
do
|
||||
$file
|
||||
done
|
||||
|
||||
-> For loops - C style for loops
|
||||
|
||||
for ((i=1; i <= 10 ; i++))
|
||||
do
|
||||
echo $i
|
||||
done
|
||||
|
||||
-> While loop
|
||||
|
||||
while [ condition ]
|
||||
do
|
||||
command(s)
|
||||
done
|
||||
|
||||
-> C-style While loop
|
||||
|
||||
while (( condition ))
|
||||
do
|
||||
command(s)
|
||||
done
|
||||
|
||||
* Example
|
||||
A=1
|
||||
LIMIT=10
|
||||
while (( A < LIMIT )) //no $ here
|
||||
do
|
||||
touch $A
|
||||
let A++
|
||||
done
|
||||
|
||||
-> Reading Files with While loop
|
||||
|
||||
while read line
|
||||
do
|
||||
command(s)..
|
||||
done < "$FILENAME"
|
||||
|
||||
cat "$FILENAME" |
|
||||
while read line
|
||||
do
|
||||
echo $line
|
||||
done
|
||||
|
||||
-> Case:
|
||||
|
||||
case "$VAR" in
|
||||
|
||||
"$condition1")
|
||||
command(s)...
|
||||
;;
|
||||
"$condition2")
|
||||
command(s)...
|
||||
;;
|
||||
*)
|
||||
command(s)..
|
||||
;;
|
||||
esac
|
||||
|
||||
*Example:
|
||||
|
||||
case "$(whoami)" in
|
||||
|
||||
"root")
|
||||
echo you are root
|
||||
;;
|
||||
"richard"|"susan")
|
||||
echo you are user
|
||||
;;
|
||||
*)
|
||||
echo I don't know you
|
||||
;;
|
||||
esac
|
||||
|
||||
-> shift
|
||||
It's a command to throw away the parameter count
|
||||
that is given to the script.
|
||||
|
||||
|
||||
-> getopts:
|
||||
|
||||
* easy way how to parse short positional parameters (-f)
|
||||
* doesn't support long positional parameters ( --help )
|
||||
|
||||
* getopts optstring name
|
||||
|
||||
-> For examples:
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
while getopts a:b:cd param; do
|
||||
case $param in OPTIND is initialized to 1
|
||||
a) echo "" each time the shell or a
|
||||
echo "parameter 'a' with argument: $OPTARG" shell script is invoked.
|
||||
;;
|
||||
b) echo "parameter 'b' with argument: $OPTARG" getopts places index of the
|
||||
;; next argument to be
|
||||
c) echo "parameter 'c' selected (no colon, no argument)" processed into the variable
|
||||
;; OPTIND
|
||||
d) echo "parameter 'd' selected (no colon, no argument)"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
-> getopt:
|
||||
|
||||
* parse command options (enhanced)
|
||||
|
||||
opts=`getopt -o a::b:cde --long file::,name::,help -- "$@"`
|
||||
eval set -- "$opts"
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
echo "All arguments: $@"
|
||||
opts=`getopt -o a::b:cde --long file::,name:,help -- "$@"`
|
||||
eval set -- "$opts"
|
||||
echo "All arguments after getopt: $@"
|
||||
|
||||
-> Arrays:
|
||||
|
||||
* Declaration
|
||||
* ARRAY=(value1 value2 .. valueN)
|
||||
* ARRAY=(one,two,three)
|
||||
|
||||
* Calling
|
||||
* ${ARRAY[0]} #one
|
||||
* ${ARRAY[1]} #two
|
||||
* ${ARRAY[2]} #three
|
||||
|
||||
|
||||
* ARRAY=(one,two,three)
|
||||
|
||||
${ARRAY[0]} #one
|
||||
${ARRAY[1]} #two
|
||||
${ARRAY[2]} #three
|
||||
${ARRAY[@]} #all items in Arrays
|
||||
${ARRAY[*]} #all items in array, delimited by first character of IFS
|
||||
${!ARRAY[@]} #all indexes in the array ( @/* )
|
||||
${#ARRAY[@]} #number of items in the array ( @/* )
|
||||
${#ARRAY[0]} #length of item zero
|
||||
|
||||
-> Functions
|
||||
|
||||
* function_name(){
|
||||
<commands>
|
||||
}
|
||||
|
||||
* function function_name{
|
||||
<commands>
|
||||
}
|
||||
|
||||
* Example
|
||||
| function hello{
|
||||
| echo hello
|
||||
| }
|
||||
|
|
||||
| echo "output from function hello: "
|
||||
| hello
|
||||
|
||||
|
||||
|
||||
| function hello{
|
||||
| echo hello $1
|
||||
| return 11
|
||||
| }
|
||||
|
|
||||
| echo "output from function hello: "
|
||||
| hello richard
|
||||
| echo "return value from function hello is: $?"
|
||||
|
||||
|
||||
|
||||
| function hello { function hello{
|
||||
| name=$1 local name=$1
|
||||
| echo "hello $name" echo "hello $name"
|
||||
| } }
|
||||
|
|
||||
| echo "enter your name:" echo "enter your name:"
|
||||
| read name #richard read name #richard
|
||||
| hello Peter #hello Peter hello Peter #hello Peter
|
||||
| echo $name #Peter echo $name #richard
|
||||
|
||||
17
array.sh
Normal file
17
array.sh
Normal file
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
ARRAY=($(ls *.txt))
|
||||
COUNT=0
|
||||
echo -e "FILE NAME \t WRITEABLE"
|
||||
for FILE in "${ARRAY[@]}"
|
||||
do
|
||||
echo -n $FILE
|
||||
echo -n "[${#ARRAY[$COUNT]}]"
|
||||
if [ -w "$FILE" ]; then
|
||||
echo -e "\t YES"
|
||||
else
|
||||
echo -e "\t NO"
|
||||
fi
|
||||
|
||||
let COUNT++
|
||||
done
|
||||
43
case.sh
Normal file
43
case.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
|
||||
#read data from users and make them option to recheck
|
||||
#if provided data are correct
|
||||
|
||||
echo -n "Enter your name: "
|
||||
read NAME
|
||||
echo -n "Enter your age: "
|
||||
read AGE
|
||||
echo -n "Enter your department: "
|
||||
read DEP
|
||||
|
||||
echo "You've entered following: "
|
||||
echo "Name: $NAME"
|
||||
echo "AGE: $AGE"
|
||||
echo "Department: $DEP"
|
||||
|
||||
CHECK=0
|
||||
while [ $CHECK -eq 0 ]
|
||||
do
|
||||
|
||||
echo -n "Is that correct? [Y/n] "
|
||||
read ANSWER
|
||||
|
||||
case "$ANSWER" in
|
||||
"Y"|"y" )
|
||||
echo "Name: $NAME" >> empl.txt
|
||||
echo "AGE: $AGE" >> empl.txt
|
||||
echo "Department: $DEP" >> empl.txt
|
||||
echo "================================" >> empl.txt
|
||||
echo "Your data were saved into employee file"
|
||||
CHECK=1
|
||||
;;
|
||||
"N"|"n" )
|
||||
echo "Nothing was saved, run the script again \
|
||||
if you want to add data to employee file"
|
||||
CHECK=1
|
||||
;;
|
||||
* )
|
||||
echo "Wrong answer provided"
|
||||
esac
|
||||
|
||||
done
|
||||
25
function.sh
Normal file
25
function.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
function addition {
|
||||
local FIRST=$1
|
||||
local SECOND=$2
|
||||
|
||||
let RESULT=FIRST+SECOND
|
||||
echo "Result is: $RESULT"
|
||||
let FIRST++
|
||||
let SECOND++
|
||||
return $RESULT
|
||||
}
|
||||
|
||||
#do the addition of two numbers
|
||||
echo -n "Enter first number: "
|
||||
read FIRST
|
||||
echo -n "Enter second number: "
|
||||
read SECOND
|
||||
addition $FIRST $SECOND
|
||||
|
||||
echo "RETURN: $?"
|
||||
echo "Printing variable:"
|
||||
echo "FIRST: $FIRST"
|
||||
echo "SECOND: $SECOND"
|
||||
40
getopt.sh
Normal file
40
getopt.sh
Normal file
@@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "All arguments: $@"
|
||||
|
||||
opts=`getopt -o a::b:cde --long file::,name:,help -- "$@"`
|
||||
eval set -- "$opts"
|
||||
echo "All arguments after getopt: $@"
|
||||
|
||||
while [ $# -gt 0 ]
|
||||
do
|
||||
case "$1" in
|
||||
-a) echo "parameter 'a' selected with argument: $2"
|
||||
shift 2 #same of 2 shift command
|
||||
;;
|
||||
-b) echo "parameter 'b' selected with argument: $2"
|
||||
shift 2
|
||||
;;
|
||||
-c) echo "paramter 'c' selected"
|
||||
shift
|
||||
;;
|
||||
-d) echo "paramter 'd' selected"
|
||||
shift
|
||||
;;
|
||||
-e) echo "paramter 'e' selected"
|
||||
shift
|
||||
;;
|
||||
--file) echo "parameter 'file' selected with argument: $2"
|
||||
shift 2
|
||||
;;
|
||||
--name) echo "parameter 'name' selected with argument: $2"
|
||||
shift 2
|
||||
;;
|
||||
--help) echo "parameter 'help' selected"
|
||||
shift
|
||||
;;
|
||||
*) echo "something else: $1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
15
getopts.sh
Normal file
15
getopts.sh
Normal file
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
while getopts a:b:cd param;
|
||||
do
|
||||
case $param in
|
||||
a) echo "parameter 'a' with argument: $OPTARG"
|
||||
;;
|
||||
b) echo "parameter 'b' selected with argument: $OPTARG"
|
||||
;;
|
||||
c) echo "parameter 'c' selected (no colon, no argument)"
|
||||
;;
|
||||
d) echo "parameter 'd' selected"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
25
print.sh
Normal file
25
print.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
#create script for printing files, which will display
|
||||
#also line numbers
|
||||
|
||||
#argument check
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Exactly one arugment is needed, run: $0 file-path"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#check if provided argument is a file
|
||||
if ! [ -f "$1" ]; then
|
||||
echo "File you've specified doesn't exist"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
FILENAME=$1
|
||||
COUNT=1
|
||||
|
||||
while read line
|
||||
do
|
||||
echo "$COUNT: $line"
|
||||
let COUNT++
|
||||
done < "$FILENAME"
|
||||
Reference in New Issue
Block a user