Linux第二次实验:shell编程笔记。

来源:互联网 发布:c语言求圆的面积 编辑:程序博客网 时间:2024/05/22 08:28

Linux 第二次实验是 shell 编程。以前没接触过,做实验的时候一点一点摸索,又查书有搜索的。终于勉强做完了。。。我先记录我学到、接触到的。最后再附上完整代码。


用 shell 如何获取用户名和主机名可以这样:
用户名是 $LOGNAME 或者 $USER

主机名是 $HOSTNAME


而输出时间的方法是:
echo "DATE: `date +%m/%d/%Y`"

这样就会输出 DATE:10/31/2012


读取用户输入的方法是
read varname

之后就可以 $varname 是使用了。


shell 里的 if 语句比较特别,我现在还是不太懂。。。
case 语句是:
case $choice inA)B)esac
其中 A B 分别为 $choice 可能的值。每个分支的最后一条语句需要以两个分号结束。

创建带有指定权限的文件夹可以这样
mkdir --m=XXX filename
或者
mkdir -m XXX filename
其中 XXX 就是权限表示。

如果要测试某个文件是否是目录或是否有某个权限,可以用 if 这样

if test -[o] filenamethen    somethingfi
其中 [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/bashwhile truedoecho USER:$LOGNAME "" HOST:$HOSTNAME "DATE:`date +%m/%d/%Y`"echo "——————————————————————————————————————————————————————————"echo "A: 创建子目录并复制文件"echo "B: 文件权限测试"echo "C: 文件字符转换"echo "D: 文件总数统计"echo "E: 文本文件行数统计"echo "Q: 退出系统"echo "——————————————————————————————————————————————————————————"read choicecase $choice inA)mkdir --m=755 $USERecho $getif test -d $USERthencp file1 $USERcp file2 $USERfi;;B)echo "请输入要测试的文件"read testFileres=$testFileif test -r $testFilethenres+=" 可读"elseres+=" 不可读"fiif test -w $testFilethenres+=" 可写"elseres+=" 不可写"fiif test -x $testFilethenres+=" 可执行"elseres+=" 不可执行"fiecho $res;;C)sed 's/[a-z]*/\U&/g' file1echo file1sed 's/[a-z]*/\U&/g' file2echo file2;;D)echo "请输入要测试的目录"read testDirecho $testDirres=`ls -l $testDir |grep "^[dl]" | wc -l`echo $testDir "目录中有 " $res " 个目录文件和符号链接文件";;E)echo "请输入要统计的文件"read testFileres=`wc -l $testFile`echo $testFile "文件有" $res "行";;Q)exit 0;;esacdone