0

I get how to read one file by using [-r] But how do I make a script that takes a multiple input of files and checks?

Lets say I type

./checkfile hi hello world 

the script should return :

hi is readable hello is readable world is not readable summary: 2 of 3 files are readable 
0

2 Answers 2

1
#! /bin/sh - n=0 for file do if [ -r "$file" ]; then printf '"%s" is readable\n' "$file" n=$((n + 1)) else printf '"%s" is not readable\n' "$file" fi done echo "$n out of $# files were readable" 

[ -r file ] test whether the file is readable by the process invoking that [ command, so by you, the user running that script, typically using the access() system call.

It doesn't say anything about whether other users may be able to read it. It doesn't attempt to read it either. For instance, it won't be able to detect files that are un-readable because the underlying storage is defective.

4
  • your shebang doesn't seem right Commented Mar 15, 2017 at 17:26
  • @NarūnasK. That's the correct she-bang if you want it to be interpreted by /bin/sh. If one wanted to be pedantic, #! /bin/sh would be incorrect. Commented Mar 15, 2017 at 19:16
  • @NarūnasK, see also Why the "-" in the "#! /bin/sh -" she-bang? Commented Mar 15, 2017 at 21:41
  • In fact my eyes caught a space between #! and /bin/sh - which after further reading appeared to be optional and having space in shebang definitely is not an error, hence apologies for confusion. Commented Mar 16, 2017 at 9:49
0

$@ is a special variable that stores all arguments (positional parameters) passed to the script in and array-like struct.

$1, $2, $3, ... are the positional parameters. "$@" is an array-like construct of all positional parameters, {$1, $2, $3 ...}. 

More about this in the bash reference manual

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.