shell练习二: 基础和语法

1:使用shell脚本,测试文件拷贝是否正常,如果正常,则显示“good copy”;如果cp命令并没有拷贝文件myfile到myfile.bak,则打印错误信息。

脚本:

#!/bin/sh

if cp myfile myfile.bak;then

    echo"good copy"

else

    echo"'$0':error!!could not copy file"

fi

运行结果:

shell练习二: 基础和语法

2:设计一个 shell 程序,添加一个新组为 class1,然后添加属于这个组的 30 个用户,用户名的形式为stdxx,其中 xx 从 01 到 30。

脚本:

#!/bin/sh

groupadd class1

for((i=1;i<=30;i++))do

    if((i<10));then

       username=stu0${i}

    else

       username=stu${i}

    fi

    useradd-g class1 $username

    echo111|passwd --stdin $username#将密码设为111且不再询问无论如何都使用

done

运行结果:

shell练习二: 基础和语法

3:编写 shell 程序,实现自动删除 50 个账号的功能。账号名为stud1 至 stud50。

脚本:

#!/bin/sh

for((i = 1;i<=30;i++))do

  if [ $i -lt 10 ] ;then

         userdel -r stu0${i} 2> /dev/null

  echo "stu0${i} delete successfully"

  else

         userdel -r stu${i} 2> /dev/null

  echo "stu${i} delete successfully"

  fi

done

运行结果:

shell练习二: 基础和语法

4:设计一个 Shell 程序,在/userdata 目录下建立 50 个目录,即 user1~user50,并设

置每个目录的权限,其中其他用户的权限为:读100(4);文件所有者的权限为:读、写、执行(7);文件所有者所在组的权限为:读、执行101(5)。754

脚本:

#!/bin/sh

for((i = 1;i<=50;i++))do

if [ -e /userdata ] ;then

mkdir -p -m 754 /userdata/user$i

echo "user$i createsuccssfully"

else

mkdir /userdata

mkdir -p -m 754 /userdata/user$i

echo "user$i createsuccssfully"

fi

done

运行结果:

shell练习二: 基础和语法

扩展提高:用 shell 编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev 目录下?     

参考答案:

#!/bin/bash

directory=/dev

for file in anaconda-ks.cfg install.log install.log.syslog

do

              if [ -f $file ]

              then

                     cp $file$directory/$file.bak

                     echo" HI, $LOGNAME $file is backed up already in $directory !!"

              fi

done