欢迎各位兄弟 发布技术文章
这里的技术是共享的
写一个脚本,利用RANDOM生成10个随机数,并找出其中的最大值,和最小值,显示出来
[root@ebs-22618 ~]# for I in {1..10}; do echo -n "$RANDOM,"; done
[root@ebs-22618 ~]# for I in {1..10}; do echo -n "$RANDOM,"; echo -e "\n"; done
29169,
5389,
2239,
17563,
8902,
6632,
25209,
10211,
15291,
12332,
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# for I in {1..10}; do echo -n "$RANDOM,"; done; echo -e "\n"
19554,27906,16709,10582,847,20048,6522,8188,6807,14626,
(-n 就是后面跟着字符,不换行 -e 就是把里面的内容转义)
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# vim random.sh
1 #!/bin/bash
2 #
3 declare -i MAX=0
4 declare -i MIN=0
5 for I in {1..10}; do
6 MYRANDOM=$RANDOM
7 [ $I -eq 1] && MIN=$MYRANDOM
8 if [ $I -le 9 ]; then
9 echo -n "$MYRANDOM,"
10 else
11 echo "$MYRANDOM"
12 fi
13 [ $MYRANDOM -gt $MAX ] && MAX=$MYRANDOM
14 [ $MYRANDOM -lt $MIN ] && MIN=$MYRANDOM
15 done
16 echo $MAX,$MIN
[root@ebs-22618 ~]# bash -x random.sh (有问题时 bash -x 试试看)
可以先生成1个随机数,然后在循环里生成9个随机数
面向过程
控制结构
顺序结构
选择结构
循环结构
选择结构:
if:单分支,双分支,多分支
if CONDITION; then
statement
...
fi
if CONDITION; then
statement
...
else
statement
...
fi
if CONDITION1; then
statement
...
elif CONDITION2; then
statement
...
else
statement
...
fi
多分支效率低
case 语句:选择结构, 比 if else 明晰得多 下面SWITCH 是变量的值,要加$美元符的
case SWITCH in
value1)
statement
...
;; (使用双分号结尾,双分号可以接在上一行写)
value2)
statement
...
;; (使用双分号结尾,双分号可以接在上一行写)
*)
statement
...
;; (使用双分号结尾,双分号可以接在上一行写) (最后一句可以没有双分号)
esac 结束(case反过来写)
[a-z]
[A-Z]
[0-9]
[abc]
[root@ebs-22618 ~]# vim case.sh
1 #!/bin/bash
2 #
3 case $1 in
4 [0-9])
5 echo "A digit."
6 ;;
7 [a-z]) 这种方法 好像不区分大小写 [a-z]改为[[:lower:]]
8 echo "Lower"
9 ;;
10 [A-Z]) 这种方法 好像不区分大小写 [a-z]改为[[:lower:]]
11 echo "Upper"
12 ;;
13 *)
14 echo "Special character"
15 ;;
16 esac
最好使用下面这个
#!/bin/bash
#
case $1 in
[0-9])
echo "A digit."
;;
[[:upper:]])
echo "Upper"
;;
[[:lower:]])
echo "Lower"
;;
*)
echo "Special character"
;;
esac
上面这些字符最好加上引号引起来
[root@ebs-22618 ~]# bash -n case.sh
[root@ebs-22618 ~]# chmod +x case.sh
[root@ebs-22618 ~]# ./case.sh D
Upper
[root@ebs-22618 ~]# ./case.sh d
Lower
[root@ebs-22618 ~]# ./case.sh 5
A digit.
[root@ebs-22618 ~]# ./case.sh ,
Special character
脚本 只接受参数 start,stop,restart,status ,别的参数的话,就告知,只能使用其中之一
[root@ebs-22618 ~]# vim service.sh
#!/bin/bash
#
case $1 in
'start')
echo "start server ...";;
'stop')
echo "stop server ...";;
'restart')
echo "Restart server...";;
'status')
echo "Running ...";;
*)
echo "`basename $0` {start|stop|restart|staus}";;
esac
[root@ebs-22618 ~]# chmod +x service.sh
[root@ebs-22618 ~]# ./service.sh start
start server ...
[root@ebs-22618 ~]# ./service.sh st
service.sh {start|stop|restart|staus}
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# ./service.sh stop
stop server ...
[root@ebs-22618 ~]# ./service.sh restart
Restart server...
[root@ebs-22618 ~]# ./service.sh status
Running ...
[root@ebs-22618 ~]#
写一个脚本,可以接受选项和参数,而后能获取每一个选项,及选项的参数;并能根据选项入参数做出特定的操作,比如
adminusers.sh --add tom,jerrry --del tom,blair -v|--version -h|--help
(linux 中一个重要的哲学 没有消息就是最好的消息,如果程序执行没有消息显示出来,说明程序执行成功了)
[root@ebs-22618 ~]# vim debug.sh
#!/bin/bash
#
DEBUG=0
case $1 in
-v|--verbose)
DEBUG=1;;
*)
echo "UnKnown options"
exit 7;;
esac
[ $DEBUG -eq 1 ] && echo hello
[root@ebs-22618 ~]# chmod +x debug.sh
[root@ebs-22618 ~]# ./debug.sh -v
hello
[root@ebs-22618 ~]# ./debug.sh --verbose
hello
[root@ebs-22618 ~]# ./debug.sh --verb
UnKnown options
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# vim adduser3.sh
#!/bin/bash
#
DEBUG=0
case $1 in
-v|--verbose)
DEBUG=1;;
esac
useradd tom &> /dev/null
[ $DEBUG -eq 1 ] && echo "Add user tom finished."
[root@ebs-22618 ~]# chmod +x adduser3.sh
[root@ebs-22618 ~]# ./adduser3.sh (没有提示)
[root@ebs-22618 ~]# userdel -r tom
[root@ebs-22618 ~]# ./adduser3.sh -v (有提示)
Add user tom finished.
写一个脚本,可以接受选项和参数,而后能获取每一个选项,及选项的参数;并能根据选项入参数做出特定的操作,比如
adminusers.sh --add tom,jerrry --del tom,blair -v|--version -h|--help
[root@ebs-22618 ~]# vim adminusers3.sh
#!/bin/bash
#
DEBUG=0
ADD=0
DEL=0
case $1 in
-v|--verbose)
DEBUG=1
shift;;
-h|--help)
echo "Usage; `basename $0` --add USER_LIST --del USER_LIST -V|--verbose -h|--help"
exit 0;;
--add)
ADD=1
USERS=$2
shift 2;;
--del)
DEL=1
USERS=$2
shift 2;;
*)
echo "Usage; `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
exit 7;;
esac
echo $DEBUG $ADD $DEL
[root@ebs-22618 ~]# chmod +x adminusers3.sh
[root@ebs-22618 ~]# ./adminusers3.sh -v --add
1 0 0
[root@ebs-22618 ~]# bash -x adminusers3.sh -v --add
+ DEBUG=0
+ ADD=0
+ DEL=0
+ case $1 in
+ DEBUG=1
+ shift
+ echo 1 0 0
1 0 0
case ( 包括 if else ) 只执行一个分支,其它的分支就不会执行了
通过 for 循环,这么做,好像是可以的
#!/bin/bash
#
DEBUG=0
ADD=0
DEL=0
for I in `seq 0 $#`; do
case $1 in
-v|--verbose)
DEBUG=1
shift;;
-h|--help)
echo "Usage; `basename $0` --add USER_LIST --del USER_LIST -V|--verbose -h|--help"
exit 0;;
--add)
ADD=1
USERS=$2
shift 2;;
--del)
DEL=1
USERS=$2
shift 2;;
*)
echo "Usage; `basename $0` --add USER_LIST --del USER_LIST -V|--verbose -h|--help"
exit 7;;
esac
done
echo $DEBUG $ADD $DEL
[root@ebs-22618 ~]# bash -x adminusers3.sh -v --add
+ DEBUG=0
+ ADD=0
+ DEL=0
++ seq 0 2
+ for I in '`seq 0 $#`'
+ case $1 in
+ DEBUG=1
+ shift
+ for I in '`seq 0 $#`'
+ case $1 in
+ ADD=1
+ USERS=
+ shift 2
+ for I in '`seq 0 $#`'
+ case $1 in
+ echo 'first --add'
first --add
+ ADD=1
+ USERS=
+ shift 2
+ echo 1 1 0
1 1 0
[root@ebs-22618 ~]# bash -x adminusers3.sh -v --add --del
+ DEBUG=0
+ ADD=0
+ DEL=0
++ seq 0 3
+ for I in '`seq 0 $#`'
+ case $1 in
+ DEBUG=1
+ shift
+ for I in '`seq 0 $#`'
+ case $1 in
+ ADD=1
+ USERS=--del
+ shift 2
+ for I in '`seq 0 $#`'
+ case $1 in
++ basename adminusers3.sh
+ echo 'Usage; adminusers3.sh --add USER_LIST --del USER_LIST -v|--verbose -h|--help'
Usage; adminusers3.sh --add USER_LIST --del USER_LIST -V|--verbose -h|--help
+ exit 7
[root@ebs-22618 ~]# bash -x adminusers3.sh -v --add user1,user2 --del
+ DEBUG=0
+ ADD=0
+ DEL=0
++ seq 0 4
+ for I in '`seq 0 $#`'
+ case $1 in
+ DEBUG=1
+ shift
+ for I in '`seq 0 $#`'
+ case $1 in
+ ADD=1
+ USERS=user1,user2
+ shift 2
+ for I in '`seq 0 $#`'
+ case $1 in
+ DEL=1
+ USERS=
+ shift 2
+ for I in '`seq 0 $#`'
+ case $1 in
+ DEL=1
+ USERS=
+ shift 2
+ for I in '`seq 0 $#`'
+ case $1 in
+ DEL=1
+ USERS=
+ shift 2
+ echo 1 1 1
1 1 1
[root@ebs-22618 ~]# bash -x adminusers3.sh --help
+ DEBUG=0
+ ADD=0
+ DEL=0
++ seq 0 1
+ for I in '`seq 0 $#`'
+ case $1 in
++ basename adminusers3.sh
+ echo 'Usage; adminusers3.sh --add USER_LIST --del USER_LIST -V|--verbose -h|--help'
Usage; adminusers3.sh --add USER_LIST --del USER_LIST -V|--verbose -h|--help
+ exit 0
[root@ebs-22618 ~]# bash -x adminusers3.sh -v --help
+ DEBUG=0
+ ADD=0
+ DEL=0
++ seq 0 2
+ for I in '`seq 0 $#`'
+ case $1 in
+ DEBUG=1
+ shift
+ for I in '`seq 0 $#`'
+ case $1 in
++ basename adminusers3.sh
+ echo 'Usage; adminusers3.sh --add USER_LIST --del USER_LIST -V|--verbose -h|--help'
Usage; adminusers3.sh --add USER_LIST --del USER_LIST -V|--verbose -h|--help
+ exit 0
#!/bin/bash
#
DEBUG=0
ADD=0
DEL=0
for I in `seq 0 $#`; do
case $1 in
-v|--verbose)
DEBUG=1
shift;;
-h|--help)
echo "Usage; `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
exit 0;;
--add)
ADD=1
ADDUSERS=$2
shift 2;;
--del)
DEL=1
DELUSERS=$2
shift 2;;
*)
# echo "Usage; `basename $0` --add USER_LIST --del USER_LIST -V|--verbose -h|--help"
# exit 7;;
esac
done
if [ $ADD -eq 1 ]; then
for USER in `echo $ADDUSERS | sed 's@,@ @g'`; do
if id $USER &> /dev/null; then
[ $DEBUG -eq 1 ] && echo "$USER exists."
else
useradd $USER
[ $DEBUG -eq 1 ] && echo "Add user $USER finished."
fi
done
fi
if [ $DEL -eq 1 ]; then
for USER in `echo $DELUSERS | sed 's@,@ @g'`; do
if id $USER &> /dev/null; then
userdel -r $USER
[ $DEBUG -eq 1 ] && echo "Delete $USER finished."
else
[ $DEBUG -eq 1 ] && echo " $USER not exists."
fi
done
fi
[root@ebs-22618 ~]# ./adminusers3.sh --add tom,jerry,natasha
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# id tom
uid=5017(tom) gid=5019(tom) 组=5019(tom)
[root@ebs-22618 ~]# id jerry
uid=5018(jerry) gid=5020(jerry) 组=5020(jerry)
[root@ebs-22618 ~]# id natasha
uid=5019(natasha) gid=5021(natasha) 组=5021(natasha)
[root@ebs-22618 ~]# ./adminusers3.sh --del tom
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# ./adminusers3.sh -v --del jerry,natasha
Delete jerry finished.
Delete natasha finished.
[root@ebs-22618 ~]# ./adminusers3.sh -v --add tom,jerry
Add user tom finished.
Add user jerry finished.
[root@ebs-22618 ~]# ./adminusers3.sh --add natasha
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# id natasha
uid=5020(natasha) gid=5022(natasha) 组=5022(natasha)
[root@ebs-22618 ~]# ./adminusers3.sh -v --add tom,jerry,natasha
tom exists.
jerry exists.
natasha exists.
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# ./adminusers3.sh -v --del tom,jerry,natasha
tom not exists.
Delete jerry finished.
Delete natasha finished.
[root@ebs-22618 ~]# ./adminusers3.sh -v --add tom,jerry,natasha --del tom
Add user tom finished.
Add user jerry finished.
Add user natasha finished.
Delete tom finished.
[root@ebs-22618 ~]# ./adminusers3.sh -v --add tom,jerry,natasha --del tom --help (有了help 直接退出了)
Usage; adminusers3.sh --add USER_LIST --del USER_LIST -v|--verbose -h|--help
[root@ebs-22618 ~]#
[root@ebs-22618 ~]# vim test11.sh
#!/bin/bash
echo $1
shift 3
echo $1
shift 4
echo $1
shift 5
echo $1
shift 6
echo $1
[root@ebs-22618 ~]# ./test11.sh 22 (当shift 超过个数的时候,好像shift 就不起作用了)
22
22
22
22
22
面向对象