54 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			54 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 |