1) select var in keywords do ops done
#!/bin/bash
#select regards each item in keywords as form, and do ops interactiv ely
echo "What is your favourite OS?"
select var in "LINUX" "UNIX" "WINDOWS" "OTHER"
do
break
done
echo "You have selected $var"
#Sample Input
#sh select.sh
#What is your favourite OS?
# 1) LINUX
# 2) UNIX
# 3) WINDOWS
# 4) OTHER
# #? 1
# You have selected LINUX
2) case var in str1) ops ;; str2) ops ;; str3) ops ;; ... *) ops esac
#!/bin/bash
#Demo for case usage
echo "************"
echo "Please select your operation:"
echo " Press C to Copy"
echo " Press D to Delete"
echo " Press B to Backup"
echo "************"
read op
case $op in
C)
echo "You have selected Copy"
;;
D)
echo "You have selected Delete"
;;
B)
echo "You have selected Backup"
;;
*)
echo "Invalid selection"
esac
3) while *** do ops done
#!/bin/bash
#Demo for while usage
NUM=1
SUM=0
while [ $NUM -le 10 ]
do
SUM='expr $NUM + $SUM`
NUM=`expr $NUM + 1`
done
echo "Sum is $SUM"
#Output Sample
#Sum is 55
#!/bin/bash
#Demo for while break usage
while [ -d /etc ]
do
ls -ld /etc
break
done
4) batch add user
#Normal add user
#useradd davy
#passwd davy
#Changing password for user davy
#New UNIX password:
...
#How to escape the interactive process when set password for user?
#Example below will solve this problem:
$echo 123455 | passwd --stdin davy
#!/bin/bash
#Demo for batch add user
#Read user
echo "Please input user prefix"
read userprefix
echo "Please input user count"
read count
#Set user
n=1
while [ $n -le $count ]
do
useradd $userprefix$n
n=`expr $n + 1`
done
#Read password
echo "Please input password prefix"
read pwdprefix
#Set password
n=1
while [ $n -le $count ]
do
echo $pwdprefix$n | passwd --stdin $userprefix$n
n=`expr $n + 1`
done
5) batch delete user
#!/bin/bash
#Demo for batch delete user
echo "Please input userprefix"
read userprefix
echo "Please input user count"
read usercount
echo "Start batch deleting user..."
n=1
while [ $n -le $usercount ]
do
usr/sbin/userdel -r $userprefix$n
n=`expr $n + 1`
done
echo "Finished batch deleting user..."
6) until ... do ops done
#!/bin/bash
#Demo for until usage
N=1
COUNT=51
SUM=0
until [ $N -eq $COUNT ]
do
SUM=`expr $SUM + $N`
N=`expr $N + 1`
done
echo "SUM IS $SUM"
7) break/continue
#!/bin/bash
#Demo for break/continue usage
while true
do
echo "Please select operation"
echo "1 COPY"
echo "2 DELETE"
echo "3 BACKUP"
echo "4 QUIT"
read op
case $op in
1)
echo "YOUR SELECTION IS COPY"
;;
2)
echo "YOUR SELECTION IS DELETE"
;;
3)
echo "YOUR SELECTION IS BACKUP"
;;
4)
echo "QUITTING>>>"
break;
;;
*)
echo "INVALID SELECTION"
;;
esac
done
8) shift
1) It is used to move all the params left by one position.
The params that moved out of space can no longer be accessed.
2) Shift one position will cause param count decrease by one
3) Shift is useful when input param number is more than 9
#!/bin/bash
#Demo for shift usage
echo "Number of args is $#"
echo "arg1=$1, arg2=$2, arg3=$3"
shift
echo "Number of args is $#"
echo "arg1=$1, arg2=$2, arg3=$3"
shift
echo "Number of args is $#"
echo "arg1=$1, arg2=$2, arg3=$3"
shift
#Sample Input
#sh shift.sh 1 2 3
#Sample Output
#Number of args is 3
#arg1=1, arg2=2, arg3=3
#Number of args is 2
#arg1=2, arg2=3, arg3=
#Number of args is 1
#arg1=3, arg2=, arg3=
#!/bin/bash
#Demo for shift usage
echo "Number of args is $#"
echo "arg1=$1, arg2=$2, arg3=$3, arg4=$4, arg5=$5, arg6=$6, arg7=$7, arg8=$8, arg9=$9
shift
echo "Number of args is $#"
echo "arg1=$1, arg2=$2, arg3=$3, arg4=$4, arg5=$5, arg6=$6, arg7=$7, arg8=$8, arg9=$9
shift
echo "Number of args is $#"
echo "arg1=$1, arg2=$2, arg3=$3, arg4=$4, arg5=$5, arg6=$6, arg7=$7, arg8=$8, arg9=$9
#Sample Input
#sh shift.sh 1 2 3 4 5 6 7 8 9 10 11
#Sample Output
#Number of args is 11
#arg1=1, arg2=2, arg3=3, arg4=4, arg5=5, arg6=6, arg7=7, arg8=8, arg9=9
#Number of args is 10
#arg1=2, arg2=3, arg3=4, arg4=5, arg5=6, arg6=7, arg7=8, arg8=9, arg9=10
#Number of args is 9
#arg1=3, arg2=4, arg3=5, arg4=6, arg5=7, arg6=8, arg7=9, arg8=10, arg9=11
#!/bin/bash
#Demo for shift usage
if [ $# -le 0 ]
then
echo "Not enough param"
exit 1
fi
COUNT=0
SUM=0
while [ $# -gt 0 ]
do
COUNT=`expr $COUNT + 1`
SUM=`expr $SUM + $1`
shift
done
echo "SUM IS $SUM
echo "COUNT IS $COUNT"
#Sample Input
#sh shift2.sh
#Sample Output
#Not enough param
#Sample Input
#sh shift2.sh 1 2 3
#Sample Output
#SUM IS 6
#COUNT IS 3
#Sample Input
#sh shift2.sh 1 2 3 4
#Sample Output
#SUM IS 10
#COUNT IS 4
#Sample Input
#sh shift2.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14
#Sample Output
#SUM IS 105
#COUNT IS 14
9) function
1) The reason why we use function is to make shell script more human readable.
2) We can totally do not use function at all, but that will mess our script up
3) There is no local variable inside a function, all the variable in a function is global visiable, except special variables and position variables
4) The special variables and position variable inside a function is only local visiable, it is passed when we call this function.
4) We can add param when we call a function
#An apache httpd example
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
....
reload() {
echo -n $"Reloading $prog:"
if ...
else ...
fi
}
3) define function syntax
function_name(){
ops..
}
4) use function syntax
function_name param1 param2 param3 ...
5) Sample
#!/bin/bash
#Demo for function usage
help(){
echo "Incorrect param number"
echo "Usage: sh function.sh \$1 \$2 \$3"
}
if [ $# -ne 3 ]
then
help
else
echo "Thank you for your correct input"
fi
#Sample Input
#sh function.sh 1
#Sample Output
#Incorrect param number
#Usage: sh function.sh \$1 \$2 \$3
#Sample Input
#sh function.sh 1 2 3
#Sample Output
#Thank you for your correct input
#!/bin/bash
#Demo for function usage
test(){
# $1 is only visiable in current function
# $# is only visiable in current function
echo "Param1=$1"
echo "Param number=$#"
}
test 1 2 3
#Sample Input
#sh function2.sh
#Sample Output
#Param1=1
#Param number=3
#/bin/bash
#Demo for function usage
test(){
echo "Param1=$1"
eccho "Param number=$#"
}
test $1 $2 $3
#Sample Input
#sh function3.sh
#Sample Output
#Param1=
#Param number=0
#Sample Input
#sh function3.sh 2 2 2
#Sample Output
#Param1=2
#Param number=3
#Sample Input
#sh function3.sh 2 2 2 2 2 2
#Sample Output
#Param1=2
#Param number=3
10) sh -n ***.sh --> Only check the syntax error
sh -x ***.sh --> Will show every step of script execution
11) If a user need to execute a script, the permissions required are as follows:
1) User have r permission for the script
2) User have rx permission for the directory that stores the script
# If the user don't have the permission of x for the script, he can still execute the script with syntax: sh script.sh ...
# If the user have the permission of x for the script, then he can execute the script with syntax: /.../script.sh ...