my unix scripts
     Here are three UNIX korn shell scripts for your edification.
Each operates by generating a list from which the user enters a
single letter to pick a target for some function.

     1. jj  - JJump to directory (more properly called jd?).
     2. px  - Pick and execute, utilizes the technique of jj.
     3. pcd - Pick to Change Directory, ditto.

        red    what the user enters:
        blue   what to notice:
        maroon what to point out:

holg@earthlink.net

jj 1. jj: As an Oracle dba i work in a lot of different directories. Being a poor typist and bad speller i am horrified by the length of numerous directories i am wont to visit. To alleviate my stress i created jj. (jj utilizes the file ~/jjlist to serve as a repository). First lets see the source: /home/oracle >cat jj #!/bin/ksh if [[ "$1" = s ]] then pwd >> ~/jjlist; sort -u ~/jjlist > ~/rm.me; mv ~/rm.me ~/jjlist return; fi print if [[ ! -a ~/jjlist ]]; then touch ~/jjlist; fi if [[ ! -s ~/jjlist ]]; then print ? = Empty list; fi awk '{print substr("abcdefghijklmnopqrstuvwxyz",NR,1),"=",$0}' ~/jjlist print print -n "Enter letter to JUMP to Directory: "; read i if (( ${#i} != 1 )); then print; return; fi awk '{ if (1 == NR) m=index("abcdefghijklmnopqrstuvwxyz",n) if (m == NR) print $1 }' n=$i ~/jjlist > ~/rm.me print if [[ -s ~/rm.me ]]; then cd $(cat ~/rm.me); fi rm ~/rm.me Pretty horrifying? Well lets see it in action. (Remember since we're changing directories we must preceded jj by a . .) use: >. jj ### jump to a directory >jj s ### save the current directory to the list (~/jjlist) Lets see jj in action: /usr/accts/oracle >. jj a = /REELBackup/dbbrz/bin/scripts b = /oracle/admin/dojv c = /oracle/admin/dojv/bdump d = /oracle/admin/dojv/pfile e = /oracle/admin/dojv/udump f = /oracle/product/7.3.3 g = /oracle/product/7.3.3/dbs h = /oracle/product/7.3.3/network/admin i = /usr/accts/oracle j = /usr/accts/oracle/cron/dojv k = /usr/mail l = /v007a/arclog/dojv m = /v007a/export/dojv Enter letter to JUMP to Directory: k /usr/mail >ls -l total 336 drwxrwxr-x 2 root mail 96 Apr 19 09:00 :saved/ -rw------- 1 archer vcin 0 Oct 13 1998 archer -rw------- 1 balys unixadm 0 Oct 14 1998 balys -rw------- 1 btrs btrs 4574 Dec 11 11:58 btrs -rw------- 1 buras unixadm 0 Apr 1 01:43 buras -rw------- 1 cfis cfis 0 Oct 16 1997 cfis -rw------- 1 leman unixadm 622 Jun 30 1998 leman -rw------- 1 neithing appl 0 Aug 13 1998 neithing -rw------- 1 oracle dba 0 Apr 22 08:49 oracle -rw------- 1 root other 0 Apr 18 05:07 root -rw------- 1 sppi sppi 31444 Dec 29 06:00 sppi -rw------- 1 sys sys 119750 Dec 11 18:05 sys -rw------- 1 true unixadm 0 Apr 1 01:43 true -rw------- 1 vcin vcin 0 Sep 2 1998 vcin -rw------- 1 hennesj unixadm 329 Apr 6 1998 wilhlm /usr/mail >. jj a = /REELBackup/dbbrz/bin/scripts b = /oracle/admin/dojv c = /oracle/admin/dojv/bdump d = /oracle/admin/dojv/pfile e = /oracle/admin/dojv/udump f = /oracle/product/7.3.3 g = /oracle/product/7.3.3/dbs h = /oracle/product/7.3.3/network/admin i = /usr/accts/oracle j = /usr/accts/oracle/cron/dojv k = /usr/mail l = /v007a/arclog/dojv m = /v007a/export/dojv Enter letter to JUMP to Directory: h /oracle/product/7.3.3/network/admin >. jj a = /REELBackup/dbbrz/bin/scripts b = /oracle/admin/dojv c = /oracle/admin/dojv/bdump d = /oracle/admin/dojv/pfile e = /oracle/admin/dojv/udump f = /oracle/product/7.3.3 g = /oracle/product/7.3.3/dbs h = /oracle/product/7.3.3/network/admin i = /usr/accts/oracle j = /usr/accts/oracle/cron/dojv k = /usr/mail l = /v007a/arclog/dojv m = /v007a/export/dojv Enter letter to JUMP to Directory: b /oracle/admin/dojv >cd cdump /oracle/admin/dojv/cdump >jj s ### save this directory to list /oracle/admin/dojv/cdump >. jj a = /REELBackup/dbbrz/bin/scripts b = /oracle/admin/dojv c = /oracle/admin/dojv/bdump d = /oracle/admin/dojv/cdump ### directory now in list e = /oracle/admin/dojv/pfile f = /oracle/admin/dojv/udump g = /oracle/product/7.3.3 h = /oracle/product/7.3.3/dbs i = /oracle/product/7.3.3/network/admin j = /usr/accts/oracle k = /usr/accts/oracle/cron/dojv l = /usr/mail m = /v007a/arclog/dojv n = /v007a/export/dojv Enter letter to JUMP to Directory: /oracle/admin/dojv/cdump >cd /usr/accts/oracle > ... Your environment may vary, but here jj, and jjlist are in my home directory and my home directory is in my PATH. Your environmental requirements may require some modification to jj. If you have need of multiple jj's you might consider jj1 and jj1list, and so on. To remove entries just edit jjlist and delete the offending lines. If you try jj you might first do: >jj s to "prime" the file ~/jjlist
px 2. px: Often i want to execute a program against one of many files with long or similar, or both, or cant remember exactly file names. Utilizing the jj technique i created px. First lets see the source: /home/oracle >cat px !/bin/ksh ls -ld $2* > ~/rm.me.0 print awk ' NR < 23 {print substr("abcdefghijklmnopqrstuv",NR,1),"=",$0}' ~/rm.me.0 print print -n "_Enter_letter_of_file_to $1 it_>"; read i if (( ${#i} != 1 )); then print; return; fi awk '{ if (1 == NR) m=index("abcdefghijklmnopqrstuv",n) if (m == NR) print $9 }' n=$i ~/rm.me.0 > ~/rm.me.1 print $1 $(cat ~/rm.me.1) rm ~/rm.me.* print Pretty horrifying? Well lets see it in action: use: >px program_to_execute [mask_of_target] (most likely you would use an editor, (rm?) but we'll use wc for these examples) /usr/accts/oracle >px wc ### first 23 files in directory a = -rw-rw-r-- 1 oracle dba 3642 Apr 15 15:11 ! b = -rw-rw-r-- 1 oracle dba 3273 Sep 21 1998 !! c = -rw-rw-r-- 1 oracle dba 5326 Aug 31 1998 !!! d = -rw-rw-r-- 1 oracle dba 257818 Jan 27 15:39 !!!.htm e = -rw-rw-r-- 1 oracle dba 40806 Jan 28 13:35 !!.htm f = -rw-rw-r-- 1 oracle dba 706 Jul 24 1998 !.c g = -rw-rw-r-- 1 oracle dba 18377 Sep 28 1998 !.csv h = -rw-rw-r-- 1 oracle dba 4797 Jan 29 15:26 !.htm i = -rw-rw-r-- 1 oracle dba 2769 Apr 27 09:54 !.txt j = -rwxr-xr-x 1 oracle dba 27 Jul 27 1998 0.pl k = -rw-rw-r-- 1 oracle dba 11 Apr 27 07:42 0.rm l = -rw-rw-r-- 1 oracle dba 33489 Oct 14 1998 00.htm m = -rwxr-xr-x 1 oracle dba 169 Feb 8 15:10 1.pl n = -rw-rw-r-- 1 oracle dba 17680 Apr 27 07:42 1.rm o = -rwxr-xr-x 1 oracle dba 76 Oct 15 1998 2.pl p = -rw-rw-r-- 1 oracle dba 8608 Apr 27 07:42 2.rm q = -rwxr-xr-x 1 oracle dba 73 Jun 11 1998 3.pl r = -rw-rw-r-- 1 oracle dba 340 Oct 14 1998 99.htm s = -rw-rw-r-- 1 oracle dba 25245 Jan 29 10:50 DBMAP.htm t = -rw-r--r-- 1 oracle dba 169 Aug 13 1997 K15dbshut u = -rw-r--r-- 1 oracle dba 242 Aug 13 1997 S97dbstart v = -rw-rw-r-- 1 oracle dba 2252 Sep 4 1998 aa.sql _Enter_letter_of_file_to wc it_>s ### this = >wc DBMAP.htm 309 1154 25245 DBMAP.htm /usr/accts/oracle >px wc s ### first 23 files that start with s a = -rw-rw-r-- 1 oracle dba 4193 Apr 27 07:41 s.log b = -rw-rw-r-- 1 oracle dba 283 Mar 5 09:52 s.lst c = -rw-rw-r-- 1 oracle dba 1655 Jan 29 09:04 s.sql d = -rw-rw-r-- 1 oracle dba 232903 Jan 22 09:56 s.txt e = -rw-rw-r-- 1 oracle dba 560 Jul 27 1998 s00 f = -rw-rw-r-- 1 oracle dba 700 Jul 27 1998 s01 g = -rwxr-xr-x 1 oracle dba 72 Jul 27 1998 s01.pl h = -rw-rw-r-- 1 oracle dba 248187 Mar 24 10:27 schvcin.htm i = -rw-rw-r-- 1 oracle dba 41819 Mar 24 10:26 schvcin0.log j = -rwxr-xr-x 1 oracle dba 317 Mar 24 10:22 schvcin0.pl k = -rw-rw-r-- 1 oracle dba 146 Mar 24 10:21 schvcin0.sql l = -rw-rw-r-- 1 oracle dba 222446 Mar 24 10:27 schvcin1.log m = -rwxr-xr-x 1 oracle dba 1228 Mar 24 10:22 schvcin1.pl n = -rw-rw-r-- 1 oracle dba 28672 Mar 24 10:26 schvcin1.sql o = drwxrwxr-x 2 oracle dba 16384 Jul 9 1998 se601 p = -rw-rw-r-- 1 oracle dba 3752 Sep 28 1998 sep21 q = -rw-rw-r-- 1 oracle dba 19255 Sep 28 1998 sep22 r = -rw-rw-r-- 1 oracle dba 19563 Sep 28 1998 sep23 s = -rw-rw-r-- 1 oracle dba 19068 Sep 28 1998 sep24 t = -rw-rw-r-- 1 oracle dba 16253 Sep 28 1998 sep25 u = -rw-rw-r-- 1 oracle dba 0 Feb 25 11:17 sppi v = -rw-rw-r-- 1 oracle dba 6098 Feb 25 11:19 sppisch0.log _Enter_letter_of_file_to wc it_>d 683 7425 232903 s.txt /usr/accts/oracle >px wc spp ### files that start with spp a = -rw-rw-r-- 1 oracle dba 0 Feb 25 11:17 sppi b = -rw-rw-r-- 1 oracle dba 6098 Feb 25 11:19 sppisch0.log c = -rwxr-xr-x 1 oracle dba 317 Feb 25 11:15 sppisch0.pl d = -rw-rw-r-- 1 oracle dba 146 Feb 25 11:19 sppisch0.sql e = -rw-rw-r-- 1 oracle dba 47038 Feb 25 11:21 sppisch1.htm f = -rw-rw-r-- 1 oracle dba 43481 Feb 25 11:20 sppisch1.log g = -rwxr-xr-x 1 oracle dba 1228 Feb 25 11:21 sppisch1.pl h = -rw-rw-r-- 1 oracle dba 4337 Feb 25 11:20 sppisch1.sql _Enter_letter_of_file_to wc it_>e 943 2175 47038 sppisch1.htm /usr/accts/oracle > To further enhance px, create an alias for your editor: >alias pe='px emacs' and >alias pu='px ule' and >alias pv='px vi' now: >pe ncc >pu m >pv log you get the idea. As a task for the reader: Create pxx - pick & execute extension - eg: >pxx vi sql
pcd 3. pcd: Same idea. You're in a directory and you want to go to one of many directories below it. First lets see the source: /home/oracle >cat pcd #!/bin/ksh ls -ld $1* | grep ^d > ~/rm.me.0 print awk ' NR < 23 {print substr("abcdefghijklmnopqrstuv",NR,1),"=",$0}' ~/rm.me.0 print print -n "_Enter_letter_of_file_to cd it_>"; read i if (( ${#i} != 1 )); then print; return; fi awk '{ if (1 == NR) m=index("abcdefghijklmnopqrstuv",n) if (m == NR) print $9 }' n=$i ~/rm.me.0 > ~/rm.me.1 print cd $(cat ~/rm.me.1) rm ~/rm.me.* print Pretty horrifying? Well lets see it in action: Remember to proceed with . . use: >. pcd /usr/accts/oracle >. pcd a = drwxrwxr-x 2 oracle dba 96 Dec 17 13:41 aqeel/ b = drwxr-xr-x 2 oracle dba 4096 Jul 14 1998 createdoja/ c = drwxr-xr-x 2 oracle dba 4096 Nov 12 1997 createdojf/ d = drwxr-xr-x 2 oracle dba 4096 Nov 12 1997 createdojm/ e = drwxrwxr-x 2 oracle dba 4096 Jul 15 1998 createdpja/ f = drwxr-xr-x 2 oracle dba 4096 Aug 31 1998 createnvcn/ g = drwxrwxr-x 5 oracle dba 4096 Oct 8 1998 cron/ h = drwxr-xr-x 2 oracle dba 4096 Jul 30 1998 doja/ i = drwxr-xr-x 2 oracle dba 4096 Apr 14 1998 dojb/ j = drwxr-xr-x 2 oracle dba 4096 Jul 29 1998 dojf/ k = drwxr-xr-x 2 oracle dba 4096 Dec 1 1997 dojimp/ l = drwxr-xr-x 2 oracle dba 4096 Mar 2 13:48 dojm/ m = drwxr-xr-x 2 oracle dba 4096 Nov 13 1997 nf/ n = drwxrwxr-x 2 oracle dba 4096 Aug 27 1998 sqls/ _Enter_letter_of_file_to cd it_>g /usr/accts/oracle/cron >. pcd a = drwxrwxr-x 2 oracle dba 4096 Apr 27 10:34 doja/ b = drwxrwxr-x 2 oracle dba 4096 Apr 27 10:34 dojf/ c = drwxrwxr-x 2 oracle dba 4096 Apr 27 10:34 dojm/ _Enter_letter_of_file_to cd it_>b /usr/accts/oracle/cron/dojf >. pcd _Enter_letter_of_file_to cd it_> /usr/accts/oracle/cron/dojf >cd /usr/accts/oracle >. pcd a = drwxrwxr-x 2 oracle dba 96 Dec 17 13:41 aqeel/ b = drwxr-xr-x 2 oracle dba 4096 Jul 14 1998 createdoja/ c = drwxr-xr-x 2 oracle dba 4096 Nov 12 1997 createdojf/ d = drwxr-xr-x 2 oracle dba 4096 Nov 12 1997 createdojm/ e = drwxrwxr-x 2 oracle dba 4096 Jul 15 1998 createdpja/ f = drwxr-xr-x 2 oracle dba 4096 Aug 31 1998 createnvcn/ g = drwxrwxr-x 5 oracle dba 4096 Oct 8 1998 cron/ h = drwxr-xr-x 2 oracle dba 4096 Jul 30 1998 doja/ i = drwxr-xr-x 2 oracle dba 4096 Apr 14 1998 dojb/ j = drwxr-xr-x 2 oracle dba 4096 Jul 29 1998 dojf/ k = drwxr-xr-x 2 oracle dba 4096 Dec 1 1997 dojimp/ l = drwxr-xr-x 2 oracle dba 4096 Mar 2 13:48 dojm/ m = drwxr-xr-x 2 oracle dba 4096 Nov 13 1997 nf/ n = drwxrwxr-x 2 oracle dba 4096 Aug 27 1998 sqls/ _Enter_letter_of_file_to cd it_>n /usr/accts/oracle/sqls >cd /usr/accts/oracle > ... Home