shell脚本练习
1、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
1
2
3
4
5
6
7
|
#!/bin/bash #编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满 #************************************************************************************************* #!/bin/bash disk_max=$( df | grep "sda" | grep -o "[[:digit:]]\{1,3\}%" | tr -d "%" | sort | tail -1) inode_max=$( df -i| grep "sda" | grep -o "[[:digit:]]\{1,3\}%" | tr -d "%" | sort | tail -1) [ $disk_max -gt 80 -o $inode_max -gt 80 ] && wall space will be full |
2、编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写(可用shadow文件验证)
1
2
3
4
5
6
7
|
#!/bin/bash #编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写 #*********************************************************************************** read -p "请输入文件: " file if [ ! -r $ file -a ! -w $ file ] ; then echo "不可读且不可写" fi |
3、编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件(创建一个文件test.sh验证)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/bin/bash #编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执 #权限,否则提示用户非脚本文件 #************************************************************************************** read -p "Please input a filename: " file if [[ $ file =~ .*sh$ ]] ; then if [ -f $ file ] ; then chmod a+x $ file echo "success" fi else echo ‘非脚本文件‘ fi |
4、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
1
2
3
4
5
6
7
|
#!/bin/bash #编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统 #*************************************************************************************** read -p "请输入禁止的用户:" user [ $uid - ge 500 ] && usermod -s /bin/nologin $user || echo ‘该用户为系统用户,无法禁止!‘ echo ‘该用户已禁止登陆‘ |
1
2
3
4
5
|
#!/bin/bash read -p "请输入允许登录的用户:" user [ $uid - ge 500 ] && usermod -s /bin/bash $user || echo ‘该用户为系统用户‘ echo ‘该用户已允许登陆‘ |
5、让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin
1
|
echo "PATH=$PATH:/usr/local/apache/bin" >> /etc/profile .d /path .sh |
6、编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等
一旦执行reset.sh,会设置以下内容
创建一个别名为ipconfig功能是显示第一个网卡的IP
设置提示符为绿色
设置vim自动显示行号
设置登录后的欢迎界面(内容自定义)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/bash #编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等一旦执行reset.sh,会设置以下内容 # 创建一个别名为ipconfig功能是显示第一个网卡的IP # 设置提示符为绿色 # 设置vim自动显示行号 # 设置登录后的欢迎界面(内容自定义) #**************************************************************************************************************** cat <<EOF >> ~/.bashrc alias ipconfig= ‘ifconfig etho‘ PS1= ‘\[\e[32;40m\][\[email protected]\h \W]\$ ‘ EOF cat <<EOF >> ~/.vimrc set nu EOF echo ‘echo welcome‘ >> /etc/bashrc |
7、编写一个创建用户的脚本,要求以下功能
a.提示用户输入希望创建的用户名(当用户超时8秒不输入,提示超时并退出)
b.检测用户名是否已存在,若存在则提示用户名已存在,并退出。
c.用户创建完成后提示用户是否要继续设置密码,若用户输入yes、YES、y、Y时则继续下一步,如输入其他,或超时8秒均退出。
d.接上一步,为用户设置密码,首先提示用户输入要设置的密码,密码的输入过程不可见。
e.对用户上一步所输入的密码进行长度检测,若少于5位(包含5位),则提示用户密码太短,并退出。
f.对用户在第d步所输入的密码进行复杂度检测,若所输入的内容与/usr/share/dict/words 字典中的某一行条目完全一致,则提示密码是一个常见单词,并退出。
g.再一次让用户输入密码,若第二次输入的密码与在第d步输入的不一致,则提示用户两次密码不一致并退出。
h.d至g步骤全部通过后,为用户设置密码后,并提示密码已成功设置。最后正确退出。
以上的所有退出情况应给出不同的返回值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#!/bin/bash #**************************************** #a.提示用户输入希望创建的用户名(当用户超时8秒不输入,提示超时并退出) #b.检测用户名是否已存在,若存在则提示用户名已存在,并退出 #c.用户创建完成后提示用户是否要继续设置密码,若用户输入yes、YES、y、Y时则继续下一步,如输入其他,或超时8秒均退出。 #d.接上一步,为用户设置密码,首先提示用户输入要设置的密码,密码的输入过程不可见 #e.对用户上一步所输入的密码进行长度检测,若少于5位(包含5位),则提示用户密码太短,并退出 #f.对用户在第d步所输入的密码进行复杂度检测,若所输入的内容与/usr/share/dict/words 字典中的某一行条目完全一致,则提示密码是一个常见单词,并退出 #g.再一次让用户输入密码,若第二次输入的密码与在第d步输入的不一致,则提示用户两次密码不一致并退出 #h.d至g步骤全部通过后,为用户设置密码后,并提示密码已成功设置。最后正确退出。 #以上的所有退出情况应给出不同的返回值。 #***************************************** read -t 8 -p "请输入创建的用户: " user if [ "$(echo $?)" - ne "0" ] ; then echo ‘超时‘ exit 1 fi A=$( cat /etc/passwd | cut -d: -f1 | grep "$user\>" ) if [ -n "$A" ] ; then echo ‘用户已存在‘ exit 2 fi useradd $user read -t 8 -p "是否设置密码? " answer || exit 3 case $answer in yes | YES | y | Y ) read -s -p "请输入至少五位密码: " password if [ "$(echo $password |grep -o " . " |grep -c " . ")" - le "5" ] ; then echo ‘密码太短‘ exit 4 else if [ "$password" == "$(cat /usr/share/dict/words |grep -o " \<$password\> ")" ] ; then echo ‘密码是一个常见单词‘ exit 5 fi fi ;; * ) exit 6 ;; esac read -p "请再次输入密码: " password_confirm if [ "$password" == "$password_confirm" ] ; then echo ‘密码设置成功‘ exit else echo ‘两次密码输入不一致‘ exit 7 fi |