436 Chapter 9 ■ Writing Scripts, Configuring Email, and Using Database dịch - 436 Chapter 9 ■ Writing Scripts, Configuring Email, and Using Database Việt làm thế nào để nói

436 Chapter 9 ■ Writing Scripts, Co

436 Chapter 9 ■ Writing Scripts, Configuring Email, and Using Databases
Although launching several programs from one script can save time in starting your
working environment and some other situations, scripts are also frequently used to run a
series of programs that manipulate data in some way. Such scripts typically do notinclude
the ampersands at the ends of the commands because one command must run after another
or may even rely on output from the first. A comprehensive list of such commands is
impossible because you can run any program you can install in Linux as a command in a
script—even another script. A few commands that are commonly used in scripts include the
following:
Normal File Manipulation Commands The file manipulation commands, such as ls,
mv, cp, and rm, are often used in scripts. You can use these commands to help automate
repetitive file maintenance tasks.
grep This command is described in Chapter 1. It locates files that contain specific strings.
find Where grepsearches for patterns within the contents of files, finddoes so based on
filenames, ownership, and similar characteristics. This command is described in Chapter 4.
cut This command extracts text from fields in a file. It’s frequently used to extract
variable information from a file whose contents are highly patterned. To use it, you pass
it one or more options that specify what information you want, followed by one or more
filenames. For instance, users’ home directories appear in the sixth colon-delimited field
of the /etc/passwdfile. You can therefore type cut -f 6 -d “:” /etc/passwdto extract
this information. The same command in a script will extract this information, which you’ll
probably save to a variable or pass to a subsequent command via a pipe.
sed This program is described in Chapter 1. It provides many of the capabilities of a
conventional text editor but via commands that can be typed at a command prompt or
entered in a script.
echo Sometimes a script must provide a message to the user; echois the tool to
accomplish this goal. You can pass various options to echoor just a string to be shown to
the user. For instance, echo “Press the Enter key”causes a script to display the specified
string.
mail The mailcommand can be used to send email from within a script. Pass it the
-s subjectparameter to specify a subject line, and give it an email address as the last
argument. If used at the command line, you then type a message and terminate it with
a Ctrl+D keystroke. If used from a script, you might omit the subject entirely, pass it an
external file as the message using input redirection, or use a here document to pass text to
the mailcommand as input. (Chapter 1 describes input redirection and here documents.)
You might want to use this command to send mail to the superuser about the actions of a
startup script or a script that runs on an automated basis. This command is described in
more detail later in this chapter.
Writing Scripts 437
Many of these commands are extremely complex, and completely describing them is beyond the scope of this chapter. You can consult these commands’ manpages for more information. A few of them are described
elsewhere in this book.
Even if you have a full grasp of how to use some key external commands, simply executing commands you might when typing them at a command prompt is of limited utility.
Many administrative tasks require you to modify what you type at a command, or even
what commands you enter, depending on information from other commands. For this reason, scripting languages include additional features to help you make your scripts useful.
Using Variables
Variablescan help you expand the utility of scripts. A variable is a placeholder in a script
for a value that will be determined when the script runs. Variables’ values can be passed
as parameters to scripts, generated internally to the scripts, or extracted from the script’s
environment.
Variables that are passed to the script are frequently called parameters. They’re represented by a dollar sign ($) followed by a number from 0 to 9—$0stands for the name of
the script, $1is the first parameter to the script, $2is the second parameter, and so on.
To understand how this might be useful, consider the task of adding a user. As described
in Chapter 7, “Administering the System,” creating an account for a new user typically
involves running at least two commands—useraddand passwd. You may also need to run
additional site-specific commands, such as commands that create unusual user-owned
directories aside from the user’s home directory.
The shiftcommand shifts the parameter variables so that what would
ordinarily be $2becomes $1, what would be $3becomes $2, and so on.
Adding a number, as in shift 3, shifts the assignments by that number of
units. The shiftcommand does not alter the $0variable, though. You can
use shiftin conjunction with a loop (described later, in “Using Loops”)
to examine all of the parameters passed to a script, in case their order or
number is unknown when you write the script.
As an example of how a script with a parameter variable can help in such situations,
consider Listing 9.2. This script creates an account and changes the account’s password
(you’ll be prompted to enter the password when you run the script). It creates a directory
in the /shareddirectory tree corresponding to the account, and it sets a symbolic link to
that directory from the new user’s home directory. It also adjusts ownership and permissions in a way that may be useful, depending on your system’s ownership and permissions
policies.
438 Chapter 9 ■ Writing Scripts, Configuring Email, and Using Databases
Listing 9.2: A script that reduces account-creation tedium
#!/bin/sh
useradd -m $1
passwd $1
mkdir -p /shared/$1
chown $1.users /shared/$1
chmod 775 /shared/$1
ln -s /shared/$1 /home/$1/shared
chown $1.users /home/$1/shared
If you use Listing 9.2, you need type only three things: the script name with the desired
username and the password (twice). For instance, if the script is called mkuser, you can use
it like this:
# mkuser ajones
Changing password for user ajones
New password:
Retype new password:
passwd: all authentication tokens updated successfully
Most of the scripts’ programs operate silently unless they encounter problems, so the
interaction (including typing the passwords, which don’t echo to the screen) is a result of
just the passwdcommand. In effect, Listing 9.2’s script replaces seven lines of commands
with one. Every one of those lines uses the username, so by running this script, you also
reduce the chance of a typo causing problems.
Another type of variable is assigned within scripts—for instance, such variables can
be set from the output of a command. These variables are also identified by leading dollar signs, but they’re typically given names that at least begin with a letter, such as $Addr
or $Name. (When values are assigned to variables, the dollar sign is omitted, as illustrated
shortly.) You can then use these variables in conjunction with normal commands as if they
were command parameters, but the value of the variable is passed to the command.
For instance, consider Listing 9.3, which checks to see whether the computer’s router is
up with the help of the pingutility. This script uses two variables. The first is $ip, which
is extracted from the output of routeusing the grep, tr, and cutcommands. (These
commands are described in Chapter 1.) When you’re assigning a value to a variable from
the output of a command, that command should be enclosed in back-tick characters (`),
which appear on the same key as the tilde (~) on most keyboards. These are notordinary
single quotes, which appear on the same key as the regular quote character (“) on most
keyboards. The second variable, $ping, simply points to the pingprogram. It can easily be
omitted, with subsequent uses of $pingreplaced by the full path to the program or simply
by ping(relying on the $PATHenvironment variable to find the program). Variables like this
are sometimes used to make it easier to modify the script in the future. For instance, if you
Writing Scripts 439
move the pingprogram, you need only modify one line of the script. Variables that point to
binaries can also be used in conjunction with conditionals to ensure that the script works
on more systems—for instance, if pingwere called something else on some systems.
Listing 9.3: Script demonstrating assignment and use of variables
#!/bin/sh
ip=`route -n | grep UG | tr -s “ “ | cut -f 2 -d “ “`
ping=”/bin/ping”
echo “Checking to see if $ip is up...”
$ping -c 5 $ip
In practice, you use Listing 9.3 by typing the script’s name. The result should be the
message Checking to see if 192.168.1.1is up(with 192.168.1.1replaced by the computer’s default gateway system) and the output from the pingcommand, which should attempt
to send five packets to the router. If the router is up and is configured to respond to pings,
you’ll see five return packets and summary information. If the router is down, you’ll see
error messages to the effect that the host was unreachable.
Listing 9.3 is of limited practical use and contains bugs. For instance, the
script identifies the computer’s gateway merely by the presence of the
string UGin the router’s output line from route. If a computer has two routers defined, this won’t work correctly, and the result is likely to be a script
that misbehaves. The point of Listing 9.3 is not to be a flawless program
but to demonstrate how variables can be assigned and used.
Scripts like Listing 9.3, which obtain information from running one or more commands,
are useful in configuring features that rely on system-specific information or information
that varies with time. You can use a similar approach to obtain the current hostname (using
the hostnamecommand),
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
436 chương 9 ■ viết kịch bản, cấu hình Email, và bằng cách sử dụng cơ sở dữ liệuMặc dù tung ra một số chương trình từ một kịch bản có thể tiết kiệm thời gian bắt đầu của bạn làm việc môi trường và một số trường hợp khác, kịch bản cũng thường được sử dụng để chạy một loạt chương trình thao tác dữ liệu một cách nào đó. Kịch bản như vậy thường làm notinclude ký tại kết thúc của lệnh bởi vì một lệnh phải chạy sau khi một hoặc thậm chí có thể dựa vào đầu ra từ đầu tiên. Một danh sách các lệnh như vậy là không thể bởi vì bạn có thể chạy bất kỳ chương trình bạn có thể cài đặt trong Linux như một lệnh trong một kịch bản-thậm chí một đoạn mã Javascript. Một vài lệnh được sử dụng phổ biến trong kịch bản bao gồm các sau:Bình thường tập tin thao tác lệnh lệnh thao tác tập tin, chẳng hạn như ls, MV, cp, và rm, thường được sử dụng trong kịch bản. Bạn có thể sử dụng các lệnh này để giúp tự động hoá các nhiệm vụ bảo trì tập tin lặp đi lặp lại.grep lệnh này được mô tả trong chương 1. Nó đặt tập tin có chứa chuỗi cụ thể.Tìm nơi grepsearches cho các mô hình trong nội dung của tập tin, finddoes như vậy dựa trên tên tập tin, quyền sở hữu, và đặc điểm tương tự. Lệnh này được mô tả trong chương 4.cắt văn bản chất chiết xuất từ lệnh này từ các lĩnh vực trong một tập tin. Nó thường được sử dụng để trích xuất thông tin biến đổi từ một tập tin có nội dung được đánh giá cao khuôn mẫu. Để sử dụng nó, bạn vượt qua nó tùy chọn một hoặc nhiều chỉ định thông tin gì bạn muốn, theo sau bởi một hoặc nhiều tên tập tin. Ví dụ: thư mục chính của người dùng xuất hiện trong lĩnh vực phân cách colon thứ sáu trong/etc/passwdfile. Bạn có thể do đó gõ cắt -f 6 - d ":" / etc/passwdto giải nén thông tin này. Lệnh tương tự trong một kịch bản sẽ giải nén thông tin này, bạn sẽ có thể tiết kiệm để một biến hoặc vượt qua để một lệnh tiếp theo thông qua một đường ống.SED chương trình này được mô tả trong chương 1. Nó cung cấp nhiều khả năng của một soạn thảo văn bản thông thường nhưng thông qua lệnh mà có thể gõ một lệnh nhắc hoặc nhập vào trong một kịch bản.echo đôi khi là một kịch bản phải cung cấp một tin nhắn cho người sử dụng; echois công cụ để đạt mục tiêu này. Bạn có thể vượt qua các tùy chọn khác nhau để echoor chỉ là một chuỗi được hiển thị cho người sử dụng. Ví dụ, echo "Bấm phím Enter" gây ra một kịch bản để hiển thị các quy định Chuỗi.thư mailcommand có thể được sử dụng để gửi thư điện tử từ bên trong một kịch bản. Vượt qua nó các -s subjectparameter để chỉ định một dòng tiêu đề, và cung cấp cho nó một địa chỉ email như cuối cùng đối số. Nếu được sử dụng tại dòng lệnh, bạn sau đó gõ một thông điệp và chấm dứt nó với một tổ hợp phím Ctrl + D. Nếu được sử dụng từ một kịch bản, bạn có thể bỏ qua các chủ đề hoàn toàn, vượt qua nó một các tập tin bên ngoài như các tin nhắn bằng cách sử dụng đầu vào chuyển hướng, hoặc sử dụng một tài liệu ở đây để vượt qua các văn bản để mailcommand như đầu vào. (Chương 1 Mô tả đầu vào chuyển hướng và các tài liệu ở đây.) Bạn có thể muốn sử dụng lệnh này để gửi thư cho siêu người dùng về những hành động của một khởi động kịch bản hoặc một kịch bản mà chạy trên một cơ sở tự động. Lệnh này được mô tả trong chi tiết hơn sau đó trong chương này.Viết kịch bản 437Nhiều người trong số những lệnh này là cực kỳ phức tạp, và hoàn toàn mô tả chúng là vượt ra ngoài phạm vi của chương này. Bạn có thể tham khảo trang man các lệnh để biết thêm thông tin. Một vài trong số chúng được mô tả ở những nơi khác trong cuốn sách này.Ngay cả khi bạn có một nắm bắt đầy đủ về cách sử dụng một số lệnh bên ngoài quan trọng, chỉ cần thực hiện lệnh bạn có thể khi gõ chúng một dấu nhắc lệnh là tiện ích hạn chế. Nhiều tác vụ quản trị yêu cầu bạn phải thay đổi những gì bạn gõ một lệnh, hoặc thậm chí những gì lệnh bạn nhập, tùy thuộc vào các thông tin từ các lệnh khác. Vì lý do này, ngôn ngữ kịch bản bao gồm các tính năng bổ sung để giúp bạn thực hiện kịch bản của bạn hữu ích.Bằng cách sử dụng biếnVariablescan giúp bạn mở rộng các tiện ích của kịch bản. Một biến là một giữ chỗ trong một kịch bản Đối với một giá trị sẽ được xác định khi kịch bản chạy. Giá trị biến có thể được thông qua dưới dạng tham số kịch bản, tạo ra trong nội bộ để các kịch bản, hoặc chiết xuất từ các tập lệnh môi trường.Các biến được truyền đến các tập lệnh thường được gọi là tham số. Họ đang biểu diễn bằng một ký hiệu đôla ($) theo sau một số từ 0 đến 9-$0stands cho tên của Các kịch bản, $1is tham số đầu tiên để kịch bản, $2is thứ hai tham số, và như vậy. Để hiểu làm thế nào điều này có thể hữu ích, hãy xem xét việc thêm người dùng. Miêu tả trong chương 7, "Quản lý hệ thống," tạo tài khoản người dùng mới thường liên quan đến việc chạy hai lệnh — useraddand passwd. Bạn cũng có thể cần để chạy lệnh trang bổ sung, chẳng hạn như lệnh mà tạo ra bất thường người dùng thuộc sở hữu thư mục bên cạnh thư mục chính của người dùng.Shiftcommand thay đổi các tham số biến vì vậy mà những gì nào thông thường là $2becomes $1, điều gì sẽ là $3becomes $2, và như vậy. Thêm một số, như trong sự thay đổi 3, thay đổi các bài tập bằng số điện thoại của đơn vị. Shiftcommand không thay đổi $0variable, mặc dù. Bạn có thể sử dụng shiftin kết hợp với một vòng lặp (sau này, được mô tả trong "Bằng cách sử dụng vòng") để kiểm tra tất cả các tham số truyền cho một kịch bản, trong trường hợp của họ đặt hàng hoặc số là không rõ khi bạn viết kịch bản.Như là một ví dụ về làm thế nào một kịch bản với một biến tham số có thể giúp đỡ trong tình huống như vậy, xem xét danh sách 9.2. Kịch bản này tạo ra một tài khoản và thay đổi mật khẩu của tài khoản (bạn sẽ được nhắc nhở để nhập mật khẩu khi bạn chạy script). Nó tạo ra một thư mục trong cây /shareddirectory tương ứng với các tài khoản, và nó đặt một liên kết tượng trưng cho thư mục đó từ thư mục chính của người dùng mới. Nó cũng điều chỉnh quyền sở hữu và cấp phép trong một cách mà có thể hữu ích, tùy thuộc vào hệ thống của bạn sở hữu và cấp phép chính sách.438 chương 9 ■ viết kịch bản, cấu hình Email, và bằng cách sử dụng cơ sở dữ liệuDanh sách 9.2: Một kịch bản mà làm giảm tạo tài khoản tedium#! / bin/shuseradd -m $1passwd $1mkdir -p /shared/$ 1chown $1.users /shared/$ 1Chmod 775 /shared/$ 1LN -s /shared/$ 1 /home/$ 1/chia sẻchown $1.users /home/$ 1/chia sẻNếu bạn sử dụng danh sách 9.2, bạn cần nhập chỉ có ba điều: tên kịch bản với mong muốn tên người dùng và mật khẩu (hai lần). Ví dụ, nếu các tập lệnh được gọi là mkuser, bạn có thể sử dụng nó như thế này:# mkuser ajonesThay đổi mật khẩu cho người dùng ajonesMật khẩu mới:Nhập lại mật khẩu mới:passwd: tất cả các thẻ xác thực Cập Nhật thành côngHầu hết các kịch bản chương trình hoạt động âm thầm trừ khi họ gặp phải vấn đề, do đó tương tác (bao gồm cả gõ mật khẩu không echo để màn hình) là kết quả của chỉ passwdcommand. Trong thực tế, danh sách của 9.2 kịch bản thay thế bảy dòng lệnh với một. Mỗi một trong những đường dây sử dụng tên người dùng, vì vậy bằng cách chạy kịch bản này, bạn cũng giảm cơ hội của một typo gây ra vấn đề.Một loại biến được chỉ định trong kịch bản — ví dụ, biến như vậy có thể được thiết lập từ đầu ra của một lệnh. Các biến này cũng được xác định bởi dấu hiệu đồng đô la hàng đầu, nhưng chúng thường tên tối thiểu bắt đầu với một lá thư, chẳng hạn như $Addrhoặc $Name. (Khi giá trị được gán cho các biến, ký hiệu đô la bỏ qua, như minh họa ngay.) Bạn có thể sử dụng các biến này trong kết hợp với bình thường lệnh như nếu họ là lệnh tham số, nhưng giá trị của biến được thông qua với lệnh.Ví dụ, xem xét danh sách 9.3, kiểm tra để xem liệu có bộ định tuyến của máy tính với sự giúp đỡ của pingutility. Hiệu ứng này sử dụng hai biến. Đầu tiên là $ip, mà được chiết xuất từ đầu ra routeusing grep, tr, và cutcommands. (Đây lệnh được mô tả trong chương 1.) Khi bạn đã gán một giá trị cho một biến từ đầu ra của một lệnh, lệnh nên được đính kèm trong trở lại-đánh dấu ký tự ('), mà xuất hiện trên cùng một phím dấu ngã (~) trên hầu hết các bàn phím. Đây là notordinary báo giá duy nhất, mà xuất hiện trên cùng một phím với ký tự thường xuyên trích dẫn (") trên hầu hết Bàn phím. Thứ hai biến, $ping, chỉ đơn giản là điểm để pingprogram. Nó có thể dễ dàng bỏ qua, với các ứng dụng tiếp theo của $pingreplaced bởi đường dẫn đầy đủ để chương trình hoặc chỉ đơn giản là bởi ping (dựa vào biến $PATHenvironment để tìm chương trình). Biến như thế này đôi khi được sử dụng để làm cho nó dễ dàng hơn để sửa đổi kịch bản trong tương lai. Ví dụ, nếu bạn Viết kịch bản 439di chuyển pingprogram, bạn cần chỉ sửa đổi một dòng của kịch bản. Biến trỏ đến những chương trình cũng có thể được sử dụng kết hợp với conditionals để đảm bảo rằng các tập lệnh hoạt động Ngày thêm hệ thống — ví dụ, nếu pingwere gọi là một cái gì đó khác trên một số hệ thống.Danh sách 9.3: Kịch bản chứng minh chuyển nhượng và sử dụng các biến#!/bin/ship=`route -n | grep UG | tr -s “ “ | cut -f 2 -d “ “`ping=”/bin/ping”echo “Checking to see if $ip is up...”$ping -c 5 $ipIn practice, you use Listing 9.3 by typing the script’s name. The result should be the message Checking to see if 192.168.1.1is up(with 192.168.1.1replaced by the computer’s default gateway system) and the output from the pingcommand, which should attempt to send five packets to the router. If the router is up and is configured to respond to pings, you’ll see five return packets and summary information. If the router is down, you’ll see error messages to the effect that the host was unreachable.Listing 9.3 is of limited practical use and contains bugs. For instance, the script identifies the computer’s gateway merely by the presence of the string UGin the router’s output line from route. If a computer has two routers defined, this won’t work correctly, and the result is likely to be a script that misbehaves. The point of Listing 9.3 is not to be a flawless program but to demonstrate how variables can be assigned and used.Scripts like Listing 9.3, which obtain information from running one or more commands, are useful in configuring features that rely on system-specific information or information that varies with time. You can use a similar approach to obtain the current hostname (using the hostnamecommand),
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
436 Chương 9 ■ Scripts Viết, Cấu hình Email, và sử dụng cơ sở dữ liệu
Mặc dù tung ra nhiều chương trình từ một kịch bản có thể tiết kiệm thời gian trong việc bắt đầu của
môi trường làm việc và một số tình huống khác, kịch bản cũng thường xuyên được sử dụng để chạy một
loạt các chương trình mà thao tác dữ liệu trong một số cách . Kịch bản như vậy thường làm notinclude
các ký hiệu ở hai đầu của các lệnh vì một lệnh phải chạy sau khi một
hoặc thậm chí có thể dựa vào đầu ra từ đầu tiên. Một danh sách đầy đủ của các lệnh như là
không thể bởi vì bạn có thể chạy bất kỳ chương trình bạn có thể cài đặt trong Linux như là một lệnh trong một
kịch bản, thậm chí một kịch bản khác. Một số lệnh thường được sử dụng trong các kịch bản bao gồm
như sau:
Bình thường tập thao tác lệnh Các lệnh thao tác với file, chẳng hạn như ls,
mv, cp, và rm, thường được sử dụng trong kịch bản. Bạn có thể sử dụng các lệnh này để giúp tự động hóa
các tác vụ bảo trì tập lặp đi lặp lại.
Grep lệnh này được mô tả trong Chương 1. Nó nằm những file chứa chuỗi cụ thể.
Tìm đâu grepsearches cho mô hình trong nội dung của các tập tin, finddoes như vậy dựa trên
tên tập tin, quyền sở hữu, và đặc điểm tương tự. Lệnh này được mô tả trong Chương 4.
cắt văn bản này chiết xuất lệnh từ trường trong một tập tin. Nó thường được sử dụng để trích xuất
thông tin biến từ một tập tin có nội dung được đánh giá cao có hoa văn. Để sử dụng nó, bạn vượt qua
nó một hoặc nhiều lựa chọn xác định những thông tin nào mà bạn muốn, theo sau bởi một hoặc nhiều
tên tập tin. Ví dụ, thư mục nhà của người sử dụng xuất hiện trong lĩnh vực đại tràng được phân định thứ sáu
của / etc / Passwdfile. Do đó, bạn có thể gõ cắt -f 6 -d ":" / etc / passwdto trích xuất
thông tin này. Các lệnh tương tự trong một kịch bản sẽ lấy thông tin này, bạn sẽ
có thể tiết kiệm đến một biến hoặc vượt qua một lệnh tiếp theo thông qua một đường ống.
Sed Chương trình này được mô tả trong Chương 1. Nó cung cấp rất nhiều các tính năng của một
trình soạn thảo văn bản thông thường nhưng thông qua các lệnh có thể được gõ tại dấu nhắc lệnh
hoặc. nhập vào trong một kịch bản
lặp Đôi khi một kịch bản phải cung cấp một thông báo cho người sử dụng; echois công cụ để
thực hiện mục tiêu này. Bạn có thể vượt qua các tùy chọn khác nhau để echoor chỉ là một chuỗi để hiển thị cho
người sử dụng. Ví dụ, echo "Nhấn phím Enter" gây ra một kịch bản để hiển thị các quy định
chuỗi.
Mail mailcommand có thể được sử dụng để gửi email từ bên trong một kịch bản. Vượt qua nó
subjectparameter -s để xác định một dòng tiêu đề và cung cấp cho nó một địa chỉ email như là cuối cùng
tranh luận. Nếu được sử dụng tại các dòng lệnh, bạn gõ một tin nhắn và chấm dứt nó với
một phím tắt Ctrl + D. Nếu được sử dụng từ một kịch bản, bạn có thể bỏ qua đối tượng hoàn toàn, vượt qua nó một
tập tin bên ngoài như thông điệp sử dụng chuyển hướng đầu vào, hoặc sử dụng một tài liệu ở đây để vượt qua văn bản để
các mailcommand như đầu vào. (Chương 1 mô tả chuyển hướng đầu vào và ở đây các tài liệu.)
Bạn có thể muốn sử dụng lệnh này để gửi thư đến superuser về những hành động của một
kịch bản khởi động hoặc một kịch bản chạy trên cơ sở tự động. Lệnh này được mô tả trong
chi tiết hơn trong chương này.
Scripts Viết 437
Nhiều người trong số các lệnh này là cực kỳ phức tạp, và hoàn toàn mô tả chúng là vượt ra ngoài phạm vi của chương này. Bạn có thể tham khảo trang man các lệnh 'để biết thêm thông tin. Một vài trong số họ được mô tả
ở những nơi khác trong cuốn sách này.
Thậm chí nếu bạn có một nắm đầy đủ về cách sử dụng một số lệnh bên ngoài quan trọng, chỉ cần thực hiện lệnh bạn có thể khi nhập chúng tại một dấu nhắc lệnh là các tiện ích giới hạn.
Nhiều nhiệm vụ hành chính đòi hỏi bạn sửa đổi những gì bạn gõ vào một lệnh, hoặc thậm chí
những lệnh nào bạn nhập vào, tùy thuộc vào thông tin từ các lệnh khác. Vì lý do này, ngôn ngữ kịch bản bao gồm các tính năng bổ sung để giúp bạn thực hiện các kịch bản của bạn hữu ích.
Sử dụng biến
giúp Variablescan bạn mở rộng các tiện ích của kịch bản. Một biến là một giữ chỗ trong một kịch bản
cho một giá trị đó sẽ được xác định khi chạy kịch bản. Biến các giá trị 'có thể được thông qua
như tham số cho kịch bản, được tạo ra trong nội bộ để các kịch bản, hoặc chiết xuất từ kịch bản của
môi trường.
Các biến được truyền cho các kịch bản thường được gọi là tham số. Họ đang được đại diện bởi một dấu đô la ($) tiếp theo là một số từ 0 đến 9 $ 0stands cho tên của
kịch bản, $ 1is tham số đầu tiên vào kịch bản, $ 2is tham số thứ hai, và như vậy.
Để hiểu cách này có thể có ích, hãy xem xét các nhiệm vụ thêm một người sử dụng. Như đã mô tả
ở Chương 7, "Quản trị hệ thống," tạo một tài khoản cho một người sử dụng mới thường
liên quan đến việc chạy ít nhất là hai lệnh-useraddand passwd. Bạn cũng có thể cần phải chạy
lệnh trang web cụ thể bổ sung, chẳng hạn như lệnh mà tạo người dùng sở hữu bất thường
thư mục ngoài thư mục chủ của người dùng.
Các shiftcommand thay đổi các biến tham số để điều gì sẽ
bình thường là $ 2becomes $ 1, những gì sẽ là $ 3becomes $ 2, và như vậy.
Thêm một số, như trong ca 3, thay đổi các bài tập bằng con số của
đơn vị. Các shiftcommand không làm thay đổi $ 0variable, mặc dù. Bạn có thể
sử dụng kết hợp shiftin với một vòng lặp (mô tả sau, trong "Sử dụng Loops")
để kiểm tra tất cả các thông số được truyền cho một kịch bản, trong trường hợp đặt hàng hoặc họ
số là chưa biết khi bạn viết kịch bản.
Như một ví dụ về cách một kịch bản với một biến tham số có thể giúp đỡ trong tình huống như vậy,
xem xét Listing 9.2. Kịch bản này tạo ra một tài khoản và thay đổi mật khẩu của tài khoản
(bạn sẽ được nhắc nhở để nhập mật khẩu khi bạn chạy các script). Nó tạo ra một thư mục
trong cây shareddirectory / tương ứng với tài khoản, và nó đặt ra một liên kết tượng trưng đến
thư mục đó từ thư mục chủ của người dùng mới. Nó cũng điều chỉnh quyền sở hữu và quyền trong một cách mà có thể hữu ích, tùy thuộc vào quyền sở hữu và quyền hạn của hệ thống
chính sách.
438 Chương 9 ■ Scripts Viết, Cấu hình Email, và sử dụng cơ sở dữ liệu
Listing 9.2: Một kịch bản mà làm giảm tính sáng tạo sự nhàm
chán! # / bin / sh
useradd -m 1 $
passwd 1 $
mkdir -p / chia sẻ / 1 $
chown $ 1.users / chia sẻ / 1 $
chmod 775 / chia sẻ / 1 $
ln -s / chia sẻ / $ 1 / home / $ 1 / chia sẻ
chown $ 1.users / home / $ 1 / chia sẻ
Nếu bạn sử dụng Bảng liệt kê 9.2, bạn cần gõ chỉ có ba điều: tên kịch bản với mong muốn
tên người dùng và mật khẩu (hai lần). Ví dụ, nếu kịch bản được gọi là mkuser, bạn có thể sử dụng
nó như thế này:
ajones # mkuser
Thay đổi mật khẩu cho ajones người dùng
Mật khẩu mới:
Nhập lại mật khẩu mới:
passwd: tất cả các thẻ xác thực được cập nhật thành công
nhất của chương trình 'kịch bản hoạt động âm thầm, trừ khi họ gặp phải vấn đề, ​​vì vậy
tương tác (bao gồm cả cách gõ mật khẩu, mà không echo để màn hình) là một kết quả của
chỉ passwdcommand. Trong thực tế, kịch bản Listing 9.2 sẽ thay thế bảy dòng lệnh
với một. Mỗi một trong những dòng sử dụng tên người dùng, do đó bằng cách chạy script này, bạn cũng
làm giảm cơ hội của một lỗi đánh máy gây ra vấn đề.
Một loại biến được phân công trong kịch bản-ví dụ, các biến như vậy có thể
được thiết lập từ đầu ra của một lệnh. Các biến này cũng được xác định bởi các dấu hiệu đồng đô la hàng đầu, nhưng họ thường đưa ra những cái tên ít nhất là bắt đầu với một bức thư, chẳng hạn như $ Addr
hoặc $ Name. (Khi giá trị được gán cho biến, dấu $ được bỏ qua, như minh họa
trong thời gian ngắn.) Sau đó bạn có thể sử dụng các biến này kết hợp với các lệnh thông thường như thể họ
là các thông số lệnh, nhưng giá trị của biến được truyền vào lệnh.
Ví Ví dụ, hãy xem xét Bảng liệt kê 9.3, trong đó kiểm tra để xem liệu router của máy tính là
với sự giúp đỡ của các pingutility. Kịch bản này sử dụng hai biến. Việc đầu tiên là $ ip, mà
được chiết xuất từ các đầu ra của routeusing các grep, tr, và cutcommands. (Những
lệnh này được mô tả trong Chương 1.) Khi bạn đang gán giá trị cho một biến từ
các đầu ra của một lệnh, lệnh đó phải được kèm theo trong các nhân vật lại dấu tick (`),
trong đó xuất hiện trên cùng một phím dấu ngã (~) trên hầu hết các bàn phím. Đây là những notordinary
dấu nháy đơn, xuất hiện trên cùng một phím với các nhân vật báo thường xuyên (") trên hầu hết các
bàn phím. Các biến thứ hai, $ ping, chỉ đơn giản là chỉ vào pingprogram. Nó có thể dễ dàng được
bỏ qua, với việc sử dụng tiếp theo của $ pingreplaced bởi các đường dẫn đầy đủ đến các chương trình hoặc chỉ đơn giản
bằng cách ping (dựa trên biến $ PATHenvironment để tìm các chương trình). Biến như thế này
đôi khi được dùng để làm cho nó dễ dàng hơn để thay đổi kịch bản trong tương lai. Ví dụ, nếu bạn
Viết Scripts 439
di chuyển các pingprogram, bạn chỉ cần thay đổi một dòng của kịch bản. Biến trỏ đến
tập tin nhị phân cũng có thể được sử dụng kết hợp với các điều kiện để đảm bảo rằng các kịch bản làm việc
trên nhiều hệ thống, ví dụ, nếu pingwere gọi là cái gì khác trên một số hệ thống.
Listing 9.3: Script chứng minh chuyển nhượng và sử dụng các biến
#! / Bin / sh
ip = `route -n | grep UG | tr-s "" | cắt -f -d 2 ""
`ping =" / bin / ping
"echo" Kiểm tra xem nếu $ ip là lên ...
"$ ping -c 5 $ ip
Trong thực tế, bạn sử dụng Bảng liệt kê 9.3 bằng cách gõ tên của kịch bản . Kết quả sẽ được
thông báo kiểm tra để xem nếu 192.168.1.1is lên (với 192.168.1.1replaced bởi hệ thống cổng mặc định của máy tính) và đầu ra từ pingcommand, mà nên cố gắng
để gửi năm gói tin đến router. Nếu router lên và được cấu hình để đáp ứng với các lệnh ping,
bạn sẽ nhìn thấy năm gói trở lại và thông tin tóm tắt. Nếu router xuống, bạn sẽ thấy
thông báo lỗi tới những hiệu ứng mà chủ nhà đã không thể truy cập.
Listing 9.3 là hạn chế sử dụng thực tế và có lỗi. Ví dụ, các
kịch bản xác định cổng của máy tính chỉ đơn thuần bởi sự hiện diện của
chuỗi UGin dòng đầu ra của router từ đường. Nếu máy tính có hai router xác định, điều này sẽ không làm việc một cách chính xác, và kết quả có thể sẽ là một kịch bản
mà đối xử tệ bạc. Điểm của Liệt kê 9.3 không phải là để có một chương trình hoàn hảo
mà còn cho thấy các biến thể được chỉ định và sử dụng.
Scripts giống như Liệt kê 9.3, mà có được thông tin từ chạy một hoặc nhiều lệnh,
rất hữu ích trong việc cấu hình các tính năng dựa trên đặc thù hệ thống thông tin hoặc các thông tin
thay đổi theo thời gian. Bạn có thể sử dụng một cách tiếp cận tương tự để có được tên máy hiện (sử dụng
các hostnamecommand),
đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2024 I Love Translation. All reserved.

E-mail: