Linux 第二次实验是 shell 编程。以前没接触过,做实验的时候一点一点摸索,又查书有搜索的。终于勉强做完了。。。我先记录我学到、接触到的。最后再附上完整代码。
用户名是 $LOGNAME 或者 $USER
主机名是 $HOSTNAME
echo "DATE: `date +%m/%d/%Y`"
这样就会输出 DATE:10/31/2012
read varname
之后就可以 $varname 是使用了。
case 语句是:
case $choice in
A)
B)
esac
其中 A B 分别为 $choice 可能的值。每个分支的最后一条语句需要以两个分号结束。创建带有指定权限的文件夹可以这样
mkdir --m=XXX filename
或者
mkdir -m XXX filename
其中 XXX 就是权限表示。如果要测试某个文件是否是目录或是否有某个权限,可以用 if 这样
if test -[o] filename
then
something
fi
其中 [o] 是要测试的内容, -d 是目录 -r 是可读 -w 是可写 -x 是可执行要将某文件内容全部替换为大写,或是某些字符串操作,可用 sed 等工具完成
全替换大写是:
sed 's/[a-z]*/\U&/g' file
其中的 & 应该是指向匹配结果本身。因此就是将匹配结果转换成大写要返回某目录下某个类型的文件数量的话,可以这样:
ls -l
会显示出文件的详细信息,开头的
drwxrwxrwx
-rwxrwxrwx
等就是文件的类型及权限信息。
目录文件以 d 开头,普通文件以 - 开头,符号链接文件以 l 开头
然后就可以这样
res=`ls -l dir | grep "^d" | wc -l`
其中 grep 统计以 d 开头。 wc 计数。-l 参数是统计换行符
最后附上代码,代码很烂,欢迎拍砖指正。
#!/bin/bash
while true
do
echo USER:$LOGNAME " " HOST:$HOSTNAME " DATE:`date +%m/%d/%Y`"
echo "——————————————————————————————————————————————————————————"
echo " A: 创建子目录并复制文件 "
echo " B: 文件权限测试 "
echo " C: 文件字符转换 "
echo " D: 文件总数统计 "
echo " E: 文本文件行数统计 "
echo " Q: 退出系统 "
echo "——————————————————————————————————————————————————————————"
read choice
case $choice in
A)
mkdir --m=755 $USER
echo $get
if test -d $USER
then
cp file1 $USER
cp file2 $USER
fi;;
B)
echo "请输入要测试的文件"
read testFile
res=$testFile
if test -r $testFile
then
res+=" 可读"
else
res+=" 不可读"
fi
if test -w $testFile
then
res+=" 可写"
else
res+=" 不可写"
fi
if test -x $testFile
then
res+=" 可执行"
else
res+=" 不可执行"
fi
echo $res;;
C)
sed 's/[a-z]*/\U&/g' file1
echo file1
sed 's/[a-z]*/\U&/g' file2
echo file2;;
D)
echo "请输入要测试的目录"
read testDir
echo $testDir
res=`ls -l $testDir |grep "^[dl]" | wc -l`
echo $testDir "目录中有 " $res " 个目录文件和符号链接文件";;
E)
echo "请输入要统计的文件"
read testFile
res=`wc -l $testFile`
echo $testFile "文件有" $res "行";;
Q)
exit 0;;
esac
done