编写一个script能接受一个目录作为命令行参数,如果传入的参数个数多于或少于1,显示一个使用信息提示,比如:“usage: program directory”。如果这个参数不是一个目录,显示一个错误信息。如果是一个目录,显示出此目录下的所有文件,然后再显示出最大的五个文件。
#!/bin/bash
if [ $# -ne 1 ]
then
echo "usage: program directory"
fi
dirname=$1
if [ -d "$dirname" ]
#写成 if [ -d $dirname ]亦可
then
echo "是目录"
else
echo "找不到这个目录"
fi
cd /home/xx/$dirname
pwd
echo "open the directory"
ls -al
echo "find top5"
du -a | sort -n -r | head -n 5
echo "another top 5"
ls -lh | sort -r | tail -n 5
echo "way 3"
du -sh * | sort -nr | head -n 5
更新!
今天测试时,发现一直显示找不到目录,一直想问题出在哪里?后来意识到判断目录要加上路径!
还有就是要注意变量的字母是否一致,我就犯了单词写错的错误
#!/bin/bash
dname=$1
echo "filename is $dname"
if [ $# -ne 1 ]
then
echo "error"
fi
if [ -d /home/xx/$dname ]
then
echo "is directory"
else
echo "not directory"
fi
cd /home/xx/$dname
pwd
echo "ls"
ls -l
判断不存在:
#如果文件夹不存在,创建文件夹
if [ ! -d "/myfolder" ]; then
mkdir /myfolder
fi
(1)算术比较运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]
(2)文件比较运算符
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
-z string 如果 string 长度为零,则为真 [ -z $myvar ]
-n string 如果 string 长度非零,则为真 [ -n $myvar ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ $myvar = one two three ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ $myvar != one two three ]
-s 文件长度不为 0
(3)输入参数
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数