主题:Linux shell 简单编程,who help me?
loveghl
[专家分:0] 发布于 2007-07-15 20:13:00
短学期学LINUX,有个作业如下,完全没思路,谁给个事例参考下,感激不尽!!!
1编写一个较为完整实用的shell程序(15%)
(1).函数调用5个以上 2
(2).代码60行以上 2 100行以上 6
(3).实用性3
(4).文档规范2
(5).完整流程图2
回复列表 (共4个回复)
沙发
zhaoning2612 [专家分:0] 发布于 2007-07-16 10:27:00
QQ:247228690找我
板凳
Zero1 [专家分:710] 发布于 2007-07-22 12:15:00
/etc下的配置文件多的是 懒~~
3 楼
wkt [专家分:400] 发布于 2007-08-13 21:25:00
自动挂载的脚本算不算实用!
#!/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 楼
wkt [专家分:400] 发布于 2007-08-13 21:26:00
接着:
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 $@
我来回复