Shell��̾���һ��1950������Զ��㳪���� | |
Larry Wall |
���������£��ű������Ǵ洢��һ���ļ����ϵͳ�����б�������������ִ���� ʱ�������°�˳�������ͬ���ܵ��������С�
���� 2-1. cleanup: һ�����/var/logĿ¼�µ���־�ļ��Ľű�
1 # Cleanup 2 # ������root�û�����. 3 4 cd /var/log 5 cat /dev/null > messages 6 cat /dev/null > wtmp 7 echo "Logs cleaned up." |
��û��ʲô��ͬѰ���ģ���������һ��������شӿ���̨��xterm(����ע��һ��ͼ���������̨). )��˳�������������һ�ֽű���������������ô���ʹ�㲻��ÿ��ִ����ͬ����ʱ���ظ���˳��������ǡ��ű������һ������, ������Ҳ��������һ��ʵ����Ŀ���Ļ��߶��ơ�
���� 2-2. cleanup: һ���Ľ����cleanup�ű�
1 #!/bin/bash 2 # Bash�ű���ȷ��ͷ��. 3 4 # Cleanup, �汾 2 5 6 # ��Ҫ��root����. 7 # �������root�û����ڴ˴����Ӵ�����Ϣ��ӡ������˳�����. 8 9 LOG_DIR=/var/log 10 # ʹ�ñ�����ʹ��Ӳ���루hard-coded�����á� 11 cd $LOG_DIR 12 13 cat /dev/null > messages 14 cat /dev/null > wtmp 15 16 17 echo "Logs cleaned up." 18 19 exit # ���Ǵ�һ���ű����˳���ȷ���ʵķ��� |
��������������һ�������Ľű��ˡ����������ǽ����ĸ��á�
���� 2-3. cleanup: һ������ű�����ǿ�棬�����ܴ�������
1 #!/bin/bash 2 # Cleanup, �汾 3 3 4 # ע��: 5 # ------- 6 # ����ű�ʹ�����൱������ԣ���Щ�����Ժ����. 7 # 8 # ����ʱ�����Ѿ�ѧ���Ȿ���һ���ˣ��㽫�����ٶ�shell�о������ˡ� 9 # 10 11 12 13 LOG_DIR=/var/log 14 ROOT_UID=0 # ֻ���û�ID����$UIDֵΪ0���û�����rootȨ��. 15 LINES=50 # Ĭ�ϵ����� 16 E_XCD=66 # ���ܽ��뵽Ŀ¼ʱ���˳�����ֵ 17 E_NOTROOT=67 # ����root�û�ʱ�˳��Ĵ���ֵ 18 19 20 # ������root�û����У����½��м�� 21 if [ "$UID" -ne "$ROOT_UID" ] 22 then 23 echo "Must be root to run this script." 24 exit $E_NOTROOT 25 fi 26 27 if [ -n "$1" ] 28 # �����Ƿ��ṩ�������в���(���Dz��������в���������һ������) 29 then 30 lines=$1 31 else 32 lines=$LINES # Default, if not specified on command line. 33 fi 34 35 36 # Stephane Chazelas����, 37 #+ ������һ�ָ��õļ�������в����ķ����� 38 #+ ���Ƕ���������˵������Щ���� 39 # 40 # E_WRONGARGS=65 # �������ֲ��� (������ʽ����)ʱ���˳��� 41 # 42 # case "$1" in 43 # "" ) lines=50;; 44 # *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGARGS;; 45 # * ) lines=$1;; 46 # esac 47 # 48 #* ��������"ѭ��"�����Ķ���ͷһ����ȥ�˽�����Ĵ�����˼. 49 50 51 cd $LOG_DIR 52 53 if [ `pwd` != "$LOG_DIR" ] # Ҳ������ if [ "$PWD" != "$LOG_DIR" ] 54 # �������Ŀ¼����/var/log��? 55 then 56 echo "Can't change to $LOG_DIR." 57 exit $E_XCD 58 fi #�ڲ��������־�ļ�֮ǰ�ٴμ���Ƿ�����ȷ��Ŀ¼�� 59 60 # �����������ٴ�ȷ���Ƿ�����ȷ��Ŀ¼� 61 # 62 # cd /var/log || { 63 # echo "Cannot change to necessary directory." >&2 64 # exit $E_XCD; 65 # } 66 67 68 69 70 tail -$lines messages > mesg.temp # ����message��־�ļ�����漸����־��Ϣ����ʱ�ļ�. 71 mv mesg.temp messages # Ȼ������ʱ�ļ�����messages��־�ļ� 72 73 74 # cat /dev/null > messages 75 #* ��������messages��־�ļ�ȫ����գ�����û������������������а�ȫ 76 77 cat /dev/null > wtmp # ': > wtmp' and '> wtmp' have the same effect. 78 echo "Logs cleaned up." 79 80 exit 0 81 # 82 #һ���ű���0Ϊ�˳���������ű�ִ�гɹ�. |
��Ϊ����ܲ���ϣ��������ϵͳ��־����գ���������汾��cleanup��������־�����ļ�����־��¼����������Ŭ����ѧ��ȥ�����ᷢ�ָ��ྫ����д������������Ĵ��롣
�ڽű���ͷ�� sha-bang ( #!) �Ǹ���ϵͳ����ļ������ض�������������͵�һ����� �Ǹ� #! ʵ�����������ֽڵ� [1] ħ��, ħ����ָ���ļ����͵�����Ǻţ��ڴ��DZ�ʾ����һ����ִ�е�shell�ű������� man magic���˽�������Ϣ����������#!����һ��·����.���·�����ǽ�������ű����������������������·����������һ��shell��Ҳ������һ��������Ի�����һ��������������������������ִ�нű��ڵ�������䡣���ӽű���ͷ������#!�����е���һ�У���ִ�У����Ǻ���ע���С� [2]
1 #!/bin/sh 2 #!/bin/bash 3 #!/usr/bin/perl 4 #!/usr/bin/tcl 5 #!/bin/sed -f 6 #!/usr/awk -f |
����ÿһ���ű�ͷ�ж��Dz�ͬ������������������һ����/bin/sh, �Ǿ���Ĭ�ϵ�Shell(Linuxϵͳ��bash��Ĭ�ϵ�shell)������Ļ����������Ľ�����. [3] ���ʹ��#!/bin/sh/bin/sh����Ϊ��ͬ����ҵUNIX��ʹ��Bourne shellΪĬ��shell������ʹ�ű��ܹ���ֲ����Linux�Ļ����ϣ���Ȼ�������㽫����ʹ��Bash�������е����ԡ����������Ľű���ѭ POSIX [4] sh��.
ֵ��ע����ǣ���"#!"�����ṩ��·����������ȷ�ģ����������нű�ֻ���յ�ͨ����"Command not found"�����Ĵ�����Ϣ��
����ű�����ֻ����һ����ͨ��ϵͳ�����û��ʹ��Shell��������Ļ�#!�������ԡ�����ĵڶ������ӱ�Ҫ����#!,��ͷ����Ϊ������ֵ(lines=50),���ʹ����Shell�����е���䡣�ٴ�����ʹ��#!/bin/sh������Ĭ�ϵ����������������Linuxϵͳ����/bin/bash.
![]() | ���ָ�Ϲ���ʹ��ģ�黯�ķ�����д�ű��������¼��ģ�塱�Ĵ���Ƭ���Ա������Ľű�ʹ�á������������һ���ܺõĿ���չ�����̿⡣����Ĵ���Ƭ�Ͽ��Բ��Խű��Ƿ���ȷ����Ŀ�������á�
�ܶ�ʱ�����дһ��ִ��ʵ�ʹ��ܵĽű������µĵ�һ���ű�����һ�����ӡ��Ժ������ܻ�ʹ����������ű���չ��������Ƶ�����ʹ�ñ�������̶����ַ��������Ǻõİ취���������İ취�������������淴��ʹ�õĴ���顣 |
д��һ���ű������ܹ������������sh scriptname, [5] ����ҲҲ������bash scriptname. ��ִ�У����Ƽ�ʹ����sh <scriptname, ��Ϊ�������ֹ�ű��ӱ�����������ݣ�����Ϊ������������ʹ��chmod������ʹ�ű�������Ϊ��ִ�е�.
chmod 555 scriptname (ʹÿ���˶��ж���ִ�е�Ȩ��) [6]
chmod +rx scriptname (ʹÿ���˶��ж���ִ�е�Ȩ��)
chmod u+rx scriptname (����ʹ�ű��ļ�ӵ�����ж���ִ�е�Ȩ��)
�ڸ��ű�����ִ��Ȩ��֮������Ժ�����ʹ��./scriptname. [7] ��ִ����������ű���"#!"�п�ͷ�����������ȷ�������������ִ����.
��ѽű����Բ�������������ѽű���ϵͳ�������������û�ʹ�ã���Ӧ�ðѽű��Ƶ�Ŀ¼/usr/local/bin ��(��Ȼ�������Ҫ��root��Ȩ��),����ֻ���������������scriptname [�س�]����ִ�нű��ˡ�
[1] | һЩ����ϲ����UNIXϵͳ�����Ƕ�����4.2BSD���Ľű����ĸ��ֽڵ�ħ�������ַ���!������Ҫ��һ���ո� -- #! /bin/sh. | |
[2] | The #!�н������������(sh����bash)��Shell�ű������ȿ����ġ���Ϊ������#�ַ���ͷ���������������ִ�нű�ʱ������ȷ�İ���һ�е���ע�������Դ������иոպ�ֻ������������������������á� ��ʵ�ϣ�����ű������˶����#!�У�bash�����������һ��ע��.
| |
[3] | ���������������������ҵ�һЩ��Ȥ������.
Ҳ����дһ����#!/bin/more,��ͷ���ļ�����ִ������ִ�н���ᷢ������һ��������ʾ���ļ��� (һ��ʹ��cat�����here document �ܸ��õذ쵽��һ��--�ο����� 17-3). | |
[4] | ����ֲ����ϵͳ�ӿ�(Portable Operating System Interface),������ʹ��UNIX�IJ���ϵͳ������POSIX�Ĺ淶������վ��Open Group site�ҵ�. | |
[5] | ע�⣺��sh scriptname����һ��Bash�ű������ֹ����Bash����չ���ԡ���˽ű����Ի���˶�����ʧ�ܡ� | |
[6] | ��Ϊ����һ���ű��ļ���ҪShell�ܶ����ļ��е������˲�����Ҫ�ļ���ִ��Ȩ�ޣ�Ҳ��Ҫ�ļ��ж���Ȩ�ޡ� | |
[7] | Ϊʲô��ֱ���üؼ���scriptname�����нű�? �����ǰĿ¼���ɱ���$PWD)��ֵ����[����ע��Ҳ��������pwd��ӡ��ǰĿ¼·��]������scriptname �ű��ļ����ڵ�Ŀ¼��Ϊʲôֱ�Ӽ���scriptname�������нű�? �������нű�����ʧ�ܡ���Ϊ���ڰ�ȫ������[����ע����������Ȥ�Ļ�������һ����ȫ©������LinuxSir��Shell�����ҷ���һƪ�������ҵ�]��ǰĿ¼Ĭ�ϲ����뵽�û���$PATH.�����С�����������ȷ��ָ�����ýű���·���ڵ�ǰ·����./scriptname. |