一、编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息。
原文代码为:
Shell
1
2
3
4
5
6
7
8
9
10
#!/bin/bash
if
!
grep
"^#!"
$
1
&
>
/
dev
/
null
;
then
cat
>>
$
1
<<
EOF
#!/bin/bash
# Author:
#Date & Time: `date +"%F %T"`
#Description:
EOF
fi
vim
+
5
$
1
初学者看到这代码,可能不太会用,其实很简单,看到有 $1,就表示需要带参数来执行,所以,这个脚本的执行方法是:
①、将以上代码保存为 shell 脚本,比如 test,
②、使用 chmod 加上执行权限,chmod +x test
③、执行 ./test newfile 即可看到效果。
Ps:当然也可以不要第②步,直接使用 sh test newfile 即可。
执行效果如下:
这个脚本对于经常写 shell 的童鞋就很有用,但是忘记带参数执行就会卡住不动,而且不带路径的话就直接在当前目录下生成新文件,会很乱。所以张戈就将其改进一下,变得更加易用:
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
if
[
[
-
z
"$1"
]
]
;
then
newfile
=
~
/
newscript_
`
date
+
%
m
%
d_
%
S
`
else
newfile
=
$
1
fi
if
!
grep
"^#!"
$newfile
&
>
/
dev
/
null
;
then
cat
>>
$newfile
<<
EOF
#!/bin/bash
# Author: Inert Your Name here.
#Date & Time: `date +"%F %T"`
#Description: Please Edit here.
EOF
fi
vim
+
5
$newfile
改进说明:如果未带参数执行,将在家目录下生成带时间戳的新文件,避免重复及乱的问题。可将这个脚本改名后直接丢到path路径中,比如/bin/addjb 那么你的系统就多了一个命令 addjb了,是不是很有趣呢!
时间有限,以下脚本暂时就不做测试、解释或改进了,请先自行测试吧!有空再来更新。
二、任意三个整数,判断最大数。
Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
echo
"please enter three number:"
read
-
p
"the first number is :"
n1
read
-
p
"the second number is:"
n2
read
-
p
"the third number is:"
n3
let
MAX
=
$n1
if
[
$n2
-
ge
$n1
]
;
then
MAX
=
$n2
fi
if
[
$n3
-
ge
$MAX
]
;
then
MAX
=
$n3
fi
echo
"the max number is $MAX."
执行效果:
注:非常简单的逻辑判断脚本,有兴趣的可以改进下,练练手。
三、求 100 以内偶数的和。
方法①:
Shell
1
2
3
4
5
6
#!/bin/bash
sum
=
0
for
I
in
{
1..50
}
;
do
sum
=
$
(
(
$sum
+
2
*
$I
)
)
done
echo
"the sum is $sum"
方法②:
Shell
1
2
3
4
5
6
7
8
#!/bin/bash
let
SUM
=
0
for
I
in
$
(
seq
1
100
)
;
do
if
[
$
[
$I
%
2
]
==
0
]
;
then
let
SUM
+=
$I
fi
done
echo
"the sum is $SUM."
四、利用 for 语句 ping C 类网、ping B 类网。
①、ping C 类网:
Shell
1
2
3
4
5
6
7
8
9
#!/bin/bash
read
-
p
"C NETWORK:"
MYNET
PINGNET
=
`
echo
$MYNET
|
sed
's/\([0-9.]*\)\ .[0-9]*/\1/g'
`
let
I
=
1
while
[
$I
-
le
254
]
;
do
ping
–
c1
–
W1
$PINGNET
.
$I
&
>
/
dev
/
null
[
$
?
-
eq
0
]
&&
echo
"$PINGNET.$I online."
||
echo
"$PINGNET.$I offline."
let
I
++
done
②、ping B类网:
Shell
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
read
-
p
"B network:"
MYNET
PINGNET
=
`
echo
$MYNET
|
sed
's/\([0-9]\{1,3\}\.[0-9]\{1,3\}\)\..*/\1/g'
`
for
P
in
{
0..255
}
;
do
for
I
in
{
1..255
}
;
do
if
ping
-
c1
-
W2
$PINGNET
.
$P
.
$I
&
>
/
dev
/
null
;
then
echo
"$PINGNET.$P.$I is online."
else
echo
"$PINGNET.$P.$I is offline."
fi
done
done
五、提示输入一个用户名,判断用户是否存在,如果存在,显示一下用户默认的 shell。
Shell
1
2
3
4
5
6
7
8
9
#!bin/bash
read
–
p
"please input a username:"
USER
if
cut
–
d:
-
f1
/
etc
/
passwd
|
grep
"^$USER$"
&
>
/
dev
/
null
;
then
MYBASH
=
`
grep
"^$USER:"
/
etc
/
passwd
|
cut
–
d
:
-
f7
`
echo
"${USER}'s shell is $MYBASH"
else
echo
"$USER not exists."
exit
4
fi
六、监控系统登录人数,超过四个,显示已经达到四个,5S检查一下,并退出脚本(exit)
Shell
1
2
3
4
5
6
7
8
9
#! /bin/bash
read
–
p
"A user:"
MYUSER
cut
–
d
:
-
f1
/
etc
/
passwd
|
grep
"^$MYUSER"
&
>
/
dev
/
null
||
exit
6
let
COUNT
=
`
who
|
grep
"^$MYUSER"
|
wc
–
l
`
until
[
$COUNT
–
ge
4
]
;
do
sleep
5
let
COUNT
=
`
who
|
grep
“
^
$MYUSER”
|
wc
-
l
`
done
echo
"$MYUSER loged 4 times."