回 帖 发 新 帖 刷新版面

主题:Linux shell 简单编程,who help me?

短学期学LINUX,有个作业如下,完全没思路,谁给个事例参考下,感激不尽!!!
1编写一个较为完整实用的shell程序(15%)

(1).函数调用5个以上    2

(2).代码60行以上    2    100行以上   6

(3).实用性3

(4).文档规范2

(5).完整流程图2

回复列表 (共4个回复)

沙发

QQ:247228690找我

板凳

/etc下的配置文件多的是  懒~~

3 楼

自动挂载的脚本算不算实用!
#!/bin/bash 
fst=""
function fstype()####this is a function that copyed by someone on linuxfans.org 
{

FILE="$(LANG=C LC_ALL=C LC_MESSAGES=C file -Lkbs "$1")" 
# echo $FILE
  if [ "$FILE" = "data" ]; then 
# could still be ReiserFS, since "file" only reads 64k in Debian 
    FILE="$(dd if="$1" skip=16397 ibs=4 count=2 2>/dev/null)" 
#    echo FILE is $FILE
  fi 
  case "$FILE" in 
   *[Rr][Ee][Ii][Ss][Ee][Rr]*)  echo "reiserfs";; 
   *ISO\ 9660*)                  echo "iso9660";; 
   *[Mm][Ii][Nn][Ii][Xx]*)      echo "minix";; 
   *[Xx][Ff][Ss]*)              echo "xfs";; 
   *[Jj][Ff][Ss]*)              echo "jfs";; 
   *[Ee][Xx][Tt]3*)             echo "ext3";; 
   *[Ee][Xx][Tt]2*)             echo "ext2";; 
   *[Ss][Ww][Aa][Pp]*)           echo "swap";; 
   *[Nn][Tt][Ff][Ss]*)          echo "ntfs";; 
   *[Ff][Aa][Tt]*)              echo "vfat";; 
   *[eE][Xx][Tt][Ee][Nn][Dd][Ee][Dd]*) echo "extended" ;;
   *)                           echo "auto";; 
esac
}

##########now everything written by wkt !!
testtab ()
{
        if [ ! -e /proc/mounts ];then
         exit 0
        fi
        {
        cat /etc/fstab|awk '{print $1}'|grep -v ^# ;
        mount|awk '{print $1}'
        }|sort|uniq|grep -q $1\$ 2>/dev/null
        if [ $? -eq 0 ];then
        echo no
        else
        echo yes
        fi
}

worn  ()##write or not 
{
        fst=$(fstype $1)
        #if [ 
        case $fst in
        *extended*) return 1 ;;
        auto) return 2;;
        swap)
        if ! cat /etc/fstab|grep -q $1 2>/dev/null;then
                echo "Do swap"
                echo "$1        swap    swap    sw,pri=1        0       0">>/etc/fstab
                swapon -a
        fi
         return 3 ;;
        *)
        if [ ! `testtab $1` == "yes" ] ;then
                return 4 
        fi
        return 0 ;;
        esac
}
##  analyze the arguments and do_main or not 
arg(){
  case $1 in
                start|"")
                do_main ;;
  restart|reload|force-reload)
         echo "Error: argument '$1' not supported" >&2
         exit 3
        ;;
  stop)
         # No-op
           ;;
    *)
        echo "Usage: mountmyfs.sh [start|stop]" >&2
        exit 3
        ;;
        esac
}

dev_det()#### detect the disk devices 
{
 for dev in a b c d e
        do
                if [ -e /dev/hd$dev ];then
                echo -n "/dev/hd$dev " 
                else
                 if [ -e /dev/sd$dev ];then
                        echo -n "/dev/sd$dev "
                        fi
                fi
done
echo ""
}

find_root()#######what is the root in the kernel command line 
{
        for root in `cat /proc/cmdline`
        do
        case $root in
        root=*)echo ${root#root=}
        ;;
        *)
        ;;
        esac
        done
}

4 楼

接着:
find_part() ##using fdisk command to search  for partitions 
{
        while [ ! "x$1" == x ];do
        FILE=$(fdisk -l $1|sed -e '1,6d'|awk '{print $1}'|grep -v $(find_root))
                for dev in $FILE
                do
                echo -n "$dev "
                done
        shift
        done
echo ""
}

mount_fs()####mount the filesystem if it have not been mounted 
{
        worn $1
        local flag=$?
        [ $flag -eq 1 ]||[ $flag -eq 2 ]||[ $flag -eq 3 ]&& return $flag 
        [ $flag -eq 4 ]&&return 4
        [ $flag -eq 0 ] && { 
        dir=/media/$(echo $1 |cut -c 6-10)
        if [ ! -d $dir ];then
                echo "Creating the dir $dir ..."
                mkdir -p $dir
        fi
        }
        case $fst in
        vfat)
        op="defaults,umask=007,iocharset=cp936,utf8" ;;
 #op="defaults,codepage=cp936,iocharset=gb2312,utf8" ;;
        ntfs)
        [ -f /sbin/mount.ntfs-3g ] && fst="ntfs-3g" ;
        op="umask=007,nls=utf8" ;;
 #op="defaults,codepage=cp936,iocharset=gb2312,nls=utf8" ;;
        *) op="defaults" ;;
        esac
cat <<eof >>/etc/fstab
$1      $dir    $fst    $op     0       1
eof
# mount $1 $dir -t $fst -o $op
# echo "Mount $1 to $dir  filestpye is $fst "
}

do_main()  ## I think of it as a main function just like the main in c language
{
dev=$(dev_det)
dev_part=$(find_part $dev )
for part in $dev_part
do
        if [ ! -e $part ];then
        continue
        fi
        mount_fs $part
done
mount -a
for part in /media/[sh]* /media/cdrom[1-9]* /media/us*
do
[ -f $part ] && rm $part
if [ -d $part ]&& ! mount|grep -q $part 2>/dev/null;then
        rmdir --ignore-fail-on-non-empty $part
fi
done
}

arg $@

我来回复

您尚未登录,请登录后再回复。点此登录或注册