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 ■ Scripts Viết, cấu hình email, và sử dụng cơ sở dữ liệu
Mặc dù ra mắt Một số 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 được sử dụng để chạy một
loạt các chương trình đó đã được xử dữ liệu trong một số cách . Kịch bản như vậy thường do đó notinclude
các ký hiệu ở hai đầu của các 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 toàn diện 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 vài lệnh đó thường được sử dụng trong các kịch bản bao gồm các
bước 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 để giúp tự động
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 file đó chứa các chuỗi cụ thể.
Labels đâu grepsearches cho mẫu 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 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 nội dung của ai là cao theo khuôn mẫu. Để sử dụng nó, bạn vượt qua
nó một hoặc nhiều tùy chọn đó xác định những thông tin mà bạn muốn, theo sau bởi một hoặc nhiều
tên tập tin. Ví dụ, nhà Thư mục người 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, Mà 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 một đường ống của bạn.
Nhưng 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 lệnh của bạn Điều đó có thể được gõ tại dấu nhắc lệnh
hoặc. Được nhập 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.
Gửi mail Các mailcommand có thể được sử dụng để gửi một 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 Sau đó 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ề các 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 một cơ sở tự động. Lệnh này được mô tả trong
chi tiết hơn sau này trong chương này.
Scripts Viết 437
Nhiều Các lệnh này vô cùng phức tạp, và hoàn toàn mô tả Them nằm ngoài phạm vi của chương này. Bạn có thể tham khảo trang man Những lệnh 'để biết thêm thông tin. Một vài trong số Them đượ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 gõ Them tại 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 script, hoặc chiết xuất từ kịch bản của
môi trường.
Các biến đó được truyền đến các kịch bản được các thông số thường gọi. 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, 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ư các lệnh đó tạo ra bất thường người dùng sở hữu
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ố như vậy Đó là những gì sẽ
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 cách đó số lượng
đơ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ượng là không rõ 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 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 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à điều khoản trong một cách đó 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 Script Điều đó 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ừ ili Encounter vấn đề, ​​vì vậy
tương tác (bao gồm cả cách gõ mật khẩu, nào 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 gán 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 Vớ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 $ Yam. (Khi giá trị được gán cho biến, dấu $ được bỏ qua, như minh họa
trong thời gian ngắn.) Bạn Sau đó có thể sử dụng các biến cùng với các lệnh thông thường như ili
Were thông số lệnh, Nhưng giá trị của biến được truyền vào lệnh.
Ví Ví dụ, xem xét Listing 9.3, nào 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, nào
đượ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 đó sẽ được bọc kín trong một ký tự trở lại dấu tick (`),
nào 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, nào 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 (") vào 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 đó kịch bản làm việc
trên nhiều hệ thống, ví dụ, nếu pingwere Được gọi là một 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, nào 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 để tương ứ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 lên Hiệu ứng đó 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
đó đối xử tệ bạc. Điểm của Liệt kê 9.3 là không phải là một chương trình tuyệt hảo
Nhưng để chứng minh làm thế nào biến có thể được phân công và sử dụng.
Scripts giống như Liệt kê 9.3, nào 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 thông tin
đó thay đổi theo thời gian. Bạn có thể sử dụng một phương pháp 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: