Bash程序  |  99行  |  2.83 KB

#!/bin/sh
################################################################################
##                                                                            ##
## Copyright (c) International Business Machines  Corp., 2001                 ##
##  Author:       Manoj Iyer, manjo@mail.utexas.edu                           ##
## Copyright (c) 2016 Cyril Hrubis <chrubis@suse.cz>                          ##
##                                                                            ##
## This program is free software;  you can redistribute it and#or modify      ##
## it under the terms of the GNU General Public License as published by       ##
## the Free Software Foundation; either version 2 of the License, or          ##
## (at your option) any later version.                                        ##
##                                                                            ##
## This program is distributed in the hope that it will be useful, but        ##
## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
## for more details.                                                          ##
##                                                                            ##
## You should have received a copy of the GNU General Public License          ##
## along with this program;  if not, write to the Free Software Foundation,   ##
## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA           ##
##                                                                            ##
################################################################################
#
# Basic test for ln
#
TST_CNT=6
TST_TESTFUNC=do_test
TST_SETUP=setup
TST_NEEDS_TMPDIR=1
. tst_test.sh

setup()
{
	ROD mkdir -p dir/subdir
	ROD echo "LTP" > file
	ROD touch dir/file
}

check_dir_link()
{
	local dname="$1"
	local lname="$2"

	ROD ls "$lname" > lname.out
	ROD ls "$dname" > dname.out

	if diff lname.out dname.out; then
		tst_res TPASS "Directory and link content is equal"
	else
		tst_res TFAIL "Directory and link content differs"
		cat lname.out
		echo
		cat dname.out
	fi
}

check_file_link()
{
	local fname="$1"
	local lname="$2"

	if diff $fname $lname; then
		tst_res TPASS "File and link content is equal"
	else
		tst_res TFAIL "File and link content differs"
	fi
}

ln_test()
{
	local args="$1"
	local src="$2"
	local link="$3"

	EXPECT_PASS ln $args $src $link

	if [ -f $src ]; then
		check_file_link $src $link
	else
		check_dir_link $src $link
	fi

	ROD rm $link
}

do_test()
{
	case $1 in
	1) ln_test ""   "file"      "file_link";;
	2) ln_test "-s" "file"      "file_link";;
	3) ln_test "-s" "dir"       "dir_link";;
	4) ln_test ""   "$PWD/file" "file_link";;
	5) ln_test "-s" "$PWD/file" "file_link";;
	6) ln_test "-s" "$PWD/dir"  "dir_link";;
	esac
}

tst_run