53 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#Newsgroups: comp.unix.shell
 | 
						|
#From: gwc@root.co.uk (Geoff Clare)
 | 
						|
#Subject: Re: Determining permissions on a file
 | 
						|
#Message-ID: <Dr79nw.DtL@root.co.uk>
 | 
						|
#Date: Fri, 10 May 1996 17:23:56 GMT
 | 
						|
 | 
						|
#Here's a bit of Korn shell that converts the symbolic permissions produced
 | 
						|
#by "ls -l" into octal, using only shell builtins.  How to create a script
 | 
						|
#combining this with an "ls -l" is left as an exercise...
 | 
						|
#
 | 
						|
#
 | 
						|
# Converted to Bash v2 syntax by Chet Ramey <chet@po.cwru.edu>
 | 
						|
#
 | 
						|
# usage: showperm modestring
 | 
						|
#
 | 
						|
# example: showperm '-rwsr-x--x'
 | 
						|
#
 | 
						|
 | 
						|
[ -z "$1" ] && {
 | 
						|
	echo "showperm: usage: showperm modestring" >&2
 | 
						|
	exit 2
 | 
						|
}
 | 
						|
 | 
						|
tmode="$1"
 | 
						|
 | 
						|
typeset -i omode sbits
 | 
						|
typeset pmode
 | 
						|
 | 
						|
# check for set-uid, etc. bits
 | 
						|
sbits=0
 | 
						|
case $tmode in
 | 
						|
???[sS]*)       (( sbits += 8#4000 )) ;; # set-uid
 | 
						|
??????[sSl]*)   (( sbits += 8#2000 )) ;; # set-gid or mand. lock
 | 
						|
?????????[tT]*) (( sbits += 8#1000 )) ;; # sticky
 | 
						|
esac
 | 
						|
 | 
						|
omode=0
 | 
						|
while :
 | 
						|
do
 | 
						|
	tmode=${tmode#?}
 | 
						|
	case $tmode in
 | 
						|
	"")       break ;;
 | 
						|
	[-STl]*)  (( omode *= 2 )) ;;
 | 
						|
	[rwxst]*) (( omode = omode*2 + 1 )) ;;
 | 
						|
	*)	  echo "$0: first letter of \"$tmode\" is unrecognized" >&2
 | 
						|
	          (( omode *= 2 ))
 | 
						|
	          ;;
 | 
						|
	esac
 | 
						|
done
 | 
						|
 | 
						|
(( omode += sbits ))
 | 
						|
 | 
						|
printf "0%o\n" $omode
 |