aboutsummaryrefslogtreecommitdiffstats
path: root/examples/scripts/showperm.bash
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scripts/showperm.bash')
-rw-r--r--examples/scripts/showperm.bash53
1 files changed, 53 insertions, 0 deletions
diff --git a/examples/scripts/showperm.bash b/examples/scripts/showperm.bash
new file mode 100644
index 0000000..2e06c0b
--- /dev/null
+++ b/examples/scripts/showperm.bash
@@ -0,0 +1,53 @@
+#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