Выбрать главу

4.12.1. How Do I Do That?

To create a script, simply place commands in a text file. For example, this script will display the ten largest files in the current directory:

ls -lS | tail -n +2 | head -10

Save this file as topten . In order to run the script, you will need to set read and execute permission:

$ chmod a+rx topten

The script can be executed by specifying the directory and filename (or an absolute pathname):

$ ./topten

-rw-r--r-- 1 root root 807103 Jul 12 21:18 termcap

-rw-r--r-- 1 root root 499861 Jul 17 08:08 prelink.cache

-rw-r--r-- 1 root root 362031 Feb 23 08:09 services

-rw-r--r-- 1 root root 97966 Jul 15 11:19 ld.so.cache

-rw-r--r-- 1 root root 92794 Jul 12 12:46 Muttrc

-rw-r--r-- 1 root root 83607 Mar 23 07:23 readahead.files

-rw-r--r-- 1 root root 73946 Jul 13 02:23 sensors.conf

-rw-r--r-- 1 root root 45083 Jul 12 18:33 php.ini

-rw-r--r-- 1 root root 30460 Jul 13 20:36 jwhois.conf

-rw-r--r-- 1 root root 26137 Mar 23 07:23 readahead.early.files

The directory name is required because the current directory ( . ) is not in the list of directories normally searched for commands (called the PATH). To make your script accessible to all users, move it to the /usr/local/bin directory, which appears by default in everyone's PATH:

# mv topten /usr/local/bin

4.12.1.1. Shell and environment variables

bash uses shell variables to keep track of current settings. These shell variables are private to the shell and are not passed to processes started by the shellbut they can be exported , which converts them into environment variables , which are passed to child processes.

You can view all shell and environment variables using the set command:

$ set

BASH=/bin/bash

BASH_ARGC=( )

BASH_ARGV=( )

BASH_LINENO=( )

BASH_SOURCE=( )

BASH_VERSINFO=([0]="3" [1]="1" [2]="17" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")

BASH_VERSION='3.1.17(1)-release'

COLORS=/etc/DIR_COLORS.xterm

COLORTERM=gnome-terminal

COLUMNS=172

CVS_RSH=ssh

DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-I4CWWfqvE6,guid=e202bd44a31ea8366b20151327662e00

DESKTOP_SESSION=default

DESKTOP_STARTUP_ID=

DIRSTACK=( )

DISPLAY=:0.0

EUID=503

GDMSESSION=default

GDM_XSERVER_LOCATION=local

GNOME_DESKTOP_SESSION_ID=Default

GNOME_KEYRING_SOCKET=/tmp/keyring-FJyfaw/socket

GROUPS=( )

GTK_RC_FILES=/etc/gtk/gtkrc:/home/hank/.gtkrc-1.2-gnome2

G_BROKEN_FILENAMES=1

HISTFILE=/home/hank/.bash_history

HISTFILESIZE=1000

HISTSIZE=1000

HOME=/home/hank

HOSTNAME=bluesky.fedorabook.com

HOSTTYPE=i686

IFS=$' \t\n'

INPUTRC=/etc/inputrc

KDEDIR=/usr

KDE_IS_PRELINKED=1

LANG=en_US.UTF-8

LESSOPEN='|/usr/bin/lesspipe.sh %s'

LINES=55

LOGNAME=hank

LS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'

MACHTYPE=i686-redhat-linux-gnu

MAIL=/var/spool/mail/hank

MAILCHECK=60

OLDPWD=/usr/share/wallpapers

OPTERR=1

OPTIND=1

OSTYPE=linux-gnu

PATH=/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/hank/bin

PIPESTATUS=([0]="0" [1]="141" [2]="0")

PPID=3067

PRELINKING=yes

PRELINK_FULL_TIME_INTERVAL=14

PRELINK_NONRPM_CHECK_INTERVAL=7

PRELINK_OPTS=-mR

PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'

PS1='$ '

PS2='> '

PS4='+ '

PWD=/etc

QTDIR=/usr/lib/qt-3.3

QTINC=/usr/lib/qt-3.3/include

QTLIB=/usr/lib/qt-3.3/lib

SESSION_MANAGER=local/beige.fedorabook.com:/tmp/.ICE-unix/2621

SHELL=/bin/bash

SHELLOPTS=braceexpand:emacs:hashalclass="underline" histexpand:history:interactive-comments:monitor

SHLVL=2

SSH_AGENT_PID=2659

SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass

SSH_AUTH_SOCK=/tmp/ssh-dNhrfX2621/agent.2621

TERM=xterm

UID=503

USER=hank

USERNAME=hank

WINDOWID=58721388

XAUTHORITY=/home/hank/.Xauthority

_=

qt_prefix=/usr/lib/qt-3.3

Many of these variables contain settings for particular programs. Some of the common variables used by many programs are shown in Table 4-16.

Table 4-16. Key environment variables

Name Purpose Format
DISPLAY Information on which X display is being used hostname:display.screen hostname is the hostname or IP address of the X server or blank for the local host, display is the display number, and screen is the screen number (optional; the screen number specifies the monitor in a multimonitor, single-person display configuration).
HOME Home directory Absolute pathname of the user's home directory.
HOSTNAME Name of this computer Fully qualified domain name of the local host.
MAIL Location of the user's default mailbox Absolute pathname of the user's mailbox (usually /var/spool/mail/<username>).
PATH List of directories to be searched to find a command Absolute pathnames of directories to be searched, separated by colons.
PS1, PS2 Primary and secondary shell prompts Plain text. Special characters sequences consisting of \ and a letter are replaced with other information; for example, \w is replaced by the current working directory (see the manpage for bash for a complete list).
TERM Model number of the current terminal Must correspond to a filename in /usr/share/terminfo/?/*.