Writing Scripts 441echo “/tmp/tempstuff found; aborting!”exitfiThis fr dịch - Writing Scripts 441echo “/tmp/tempstuff found; aborting!”exitfiThis fr Việt làm thế nào để nói

Writing Scripts 441echo “/tmp/temps

Writing Scripts 441
echo “/tmp/tempstuff found; aborting!”
exit
fi
This fragment causes the script to exit if the file /tmp/tempstuffis present and is larger
than 0 bytes. The thenkeyword marks the beginning of a series of lines that execute only if
the conditional is true, and fi(ifbackward) marks the end of the ifblock. Such code may
be useful if the script creates and then later deletes this file, because its presence indicates
that a previous run of the script didn’t succeed or is still underway.
An alternative form for a conditional expression uses the testkeyword rather than
square brackets around the conditional:
if test -s /tmp/tempstuff
You can also test a command’s return value by using the command as the condition:
if [ command]
then
additional-commands
fi
In this example, the additional-commandswill be run only if commandcompletes successfully. If commandreturns an error code, the additional-commandswon’t be run.
Conditional expressions may be expanded by use of the elseclause:
if [ conditional-expression]
then
commands
else
other-commands
fi
Code of this form causes either commandsor other-commandsto execute, depending on
the evaluation of conditional-expression. This is useful if somethingshould happen in
a part of the program but precisely what should happen depends on some condition. For
instance, you may want to launch one of two different file archiving programs depending
on a user’s input.
What do you do if more than two outcomes are possible—for instance, if a user may
provide any one of four possible inputs? You can nest several if/then/elseclauses, but this
gets awkward very quickly. A cleaner approach is to use case:
case word in
pattern1) command(s) ;;
pattern2) command(s) ;;
...
esac
442 Chapter 9 ■ Writing Scripts, Configuring Email, and Using Databases
For a casestatement, a wordis likely to be a variable, and each patternis a possible
value of that variable. The patterns can be expanded much like filenames, using the same
wildcards and expansion rules (*to stand for any string, for instance). You can match an
arbitrary number of patterns in this way. Each set of commands must end with a double
semicolon (;;), and the casestatement as a whole ends in the string esac(casebackward).
Upon execution, bashexecutes the commands associated with the first pattern to match
the word. Execution then jumps to the line following the esacstatement; any intervening
commands don’t execute. If no patterns match the word, no code within the casestatement
executes. If you want to have a default condition, use *as the final pattern; this pattern
matches any word, so its commands will execute if no other patternmatches.
Using Loops
Conditional expressions are sometimes used in loops. Loops are structures that tell the
script to perform the same task repeatedly until some condition is met (or until some condition is no longer met). For instance, Listing 9.5 shows a loop that plays all the .wavaudio
files in a directory.
Listing 9.5: A script that executes a command on every matching file in a directory
#!/bin/bash
for d in `ls *.wav` ; do
aplay $d
done
The aplaycommand is a basic audio file player that works with the
Advanced Linux Sound Architecture (ALSA) audio drivers. On some systems, you may need to use playor some other command instead of aplay.
The forloop as used here executes once for every item in the list generated by ls *.wav.
Each of those items (filenames) is assigned in turn to the $dvariable and so is passed to the
aplaycommand.
The seqcommand can be useful in creating forloops (and in other ways, too): This
command generates a list of numbers starting from its first argument and continuing to its
last one. For instance, typing seq 1 10generates 10 lines, each with a number between 1
and 10. You can use a forloop beginning for x in `seq 1 10`to have the loop execute
10 times, with the value of $xincrementing with each iteration. If you pass just one parameter to seq, it interprets that number as an ending point, with the starting point being 1. If
you pass three values to seq, it interprets them as a starting value, an increment amount,
and an ending value.
Another type of loop is the whileloop, which executes for as long as its condition is
true. The basic form of this loop type is like this:
Writing Scripts 443
while [ condition]
do
commands
done
The untilloop is similar in form, but it continues execution for as long as its condition
is false—that is, until the condition becomes true.
Using Functions
A functionis a part of a script that performs a specific subtask and that can be called by
name from other parts of the script. Functions are defined by placing parentheses after the
function name and enclosing the lines that make up the function within curly braces:
myfn() {
commands
}
The keyword functionmay optionally precede the function name. In either event, the
function is called by name as if it were an ordinary internal or external command.
Functions are very useful in helping to create modular scripts. For instance, if your script
needs to perform half a dozen distinct computations, you may place each computation in a
function and then call them all in sequence. Listing 9.6 demonstrates the use of functions in
a simple program that copies a file but aborts with an error message if the target file already
exists. This script accepts a target and a destination filename and must pass those filenames
to the functions.
Listing 9.6: A script demonstrating the use of functions
#/bin/bash
doit() {
cp $1 $2
}
function check() {
if [ -s $2 ]
then
echo “Target file exists! Exiting!”
exit
fi
}
check $1 $2
doit $1 $2
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Viết kịch bản 441echo "/ tmp/tempstuff tìm thấy; aborting!"lối raFiMảnh này gây ra kịch bản để thoát khỏi nếu tập tin/tmp/tempstuffis trình bày và là lớn hơn hơn 0 byte. Thenkeyword đánh dấu sự khởi đầu của một loạt các dây chuyền thực hiện chỉ khi có điều kiện là đúng, và fi(ifbackward) đánh dấu sự kết thúc của ifblock. Mã như vậy có thể thể hữu ích nếu các kịch bản tạo ra và rồi sau đó xoá tệp này, bởi vì sự hiện diện của nó cho thấy rằng một chạy trước của kịch bản không thành công hoặc vẫn đang thực hiện.Một hình thức thay thế cho một biểu hiện có điều kiện sử dụng testkeyword thay vì dấu ngoặc vuông xung quanh có điều kiện:nếu kiểm tra -s /tmp/tempstuffBạn cũng có thể kiểm tra giá trị trả lại một lệnh bằng cách sử dụng lệnh như là điều kiện:Nếu [lệnh]sau đólệnh bổ sungFiTrong ví dụ này, bổ sung commandswill chạy chỉ khi commandcompletes thành công. Nếu commandreturns một mã lỗi, bổ sung commandswon't được chạy.Biểu hiện có điều kiện có thể được mở rộng bằng cách sử dụng elseclause:Nếu [có điều kiện biểu hiện]sau đólệnhkháckhác-lệnhFiQuy tắc này nguyên nhân hình thức hoặc khác – commandsor commandsto thực hiện, tùy thuộc vào đánh giá các biểu hiện có điều kiện. Điều này là hữu ích nếu somethingshould xảy ra trong một phần của chương trình nhưng chính xác những gì sẽ xảy ra phụ thuộc vào một số điều kiện. Cho Ví dụ, bạn có thể muốn để khởi động một trong hai khác nhau tập tin lưu trữ chương trình tùy thuộc trên đầu vào của người dùng.Những gì bạn làm nếu nhiều hơn hai kết quả là có thể-ví dụ, nếu một người sử dụng có thể cung cấp cho bất kỳ một trong bốn có thể đầu hàng vào? Bạn có thể làm tổ một số nếu/đó/elseclauses, nhưng điều này được khó khăn rất nhanh chóng. Một cách tiếp cận sạch hơn là sử dụng trường hợp:trường hợp từ trongpattern1) command(s);pattern2) command(s);...esac442 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ệuCho một casestatement, một wordis có khả năng là một biến, và mỗi patternis một tốt giá trị của biến đó. Các mô hình có thể được mở rộng giống như tên tập tin, sử dụng cùng một ký tự đại diện và mở rộng quy tắc (* đứng cho bất kỳ chuỗi, ví dụ). Bạn có thể phù hợp với một số tùy ý của các mô hình theo cách này. Mỗi tập các lệnh phải kết thúc với một đôi dấu chấm phẩy (;), và casestatement như một toàn thể kết thúc trong chuỗi esac(casebackward).Khi thực hiện, bashexecutes lệnh liên kết với các mô hình đầu tiên để phù hợp với từ. Thực hiện sau đó nhảy vào dòng sau esacstatement; bất kỳ can thiệp lệnh không thực hiện. Nếu không có mô hình phù hợp với từ, không có mã số trong vòng casestatement thực hiện. Nếu bạn muốn có một tình trạng mặc định, sử dụng * như các mô hình cuối cùng; Mô hình này phù hợp với bất kỳ từ nào, do đó, lệnh của nó sẽ thực hiện nếu không có patternmatches khác.Sử dụng các vòngBiểu hiện có điều kiện đôi khi được sử dụng trong vòng. Vòng là cấu trúc cho biết các kịch bản để thực hiện nhiệm vụ tương tự nhiều lần cho đến khi một số điều kiện được đáp ứng (hoặc cho đến khi một số điều kiện không còn gặp). Ví dụ, danh sách 9.5 cho thấy một vòng lặp đóng tất cả .wavaudio tập tin trong một thư mục.Danh sách 9.5: Một kịch bản thực hiện một lệnh vào mỗi tập tin phù hợp trong một thư mục#! / bin/bashd trong ' ls * .wav '; làmaplay $dthực hiệnAplaycommand là một cầu thủ tập tin âm thanh cơ bản mà làm việc với các Nâng cao kiến trúc âm thanh Linux (ALSA) điều khiển âm thanh. Trên một số hệ thống, bạn có thể cần phải sử dụng playor một số lệnh khác thay vì aplay.Forloop như được sử dụng ở đây thực hiện một lần cho mỗi mục trong danh sách được tạo ra bởi ls *.wav. Mỗi người trong số những mặt hàng (tên tập tin) được gán các lần lượt để $dvariable và vì vậy được truyền cho các aplaycommand.Seqcommand có thể hữu ích trong việc tạo ra forloops (và theo những cách khác, quá): đây lệnh tạo ra một danh sách các số bắt đầu từ đối số đầu tiên của nó và tiếp tục của nó cuối cùng. Ví dụ, gõ seq 1 10generates 10 dòng, mỗi với một số giữa 1 và 10. Bạn có thể sử dụng một khởi đầu forloop với x trong ' seq 1 10' có vòng lặp thực hiện 10 lần, với giá trị của $xincrementing với mỗi iteration. Nếu bạn vượt qua chỉ là một tham số để seq, nó dịch số như là một điểm kết thúc, với điểm khởi đầu là 1. Nếu bạn vượt qua ba giá trị để seq, nó dịch chúng như là một giá trị bắt đầu, một số tiền tăng, và một giá trị kết thúc.Một loại vòng lặp là whileloop, mà thực hiện cho miễn là điều kiện của nó là sự thật. Các hình thức cơ bản của vòng loại là như thế này:Viết kịch bản 443trong khi [điều kiện]làmlệnhthực hiệnUntilloop tương tự như trong hình thức, nhưng nó tiếp tục thực hiện càng lâu như tình trạng của nó là sai-có nghĩa là, cho đến khi điều kiện trở thành sự thật.Bằng cách sử dụng chức năngMột functionis một phần của một kịch bản thực hiện một nhiệm vụ con cụ thể và rằng có thể được gọi là tên từ các bộ phận khác của kịch bản. Chức năng được xác định bằng cách đặt dấu ngoặc đơn sau khi các chức năng tên và kèm theo dòng tạo nên các chức năng trong niềng răng xoăn:myfn() {}lệnh}Functionmay từ khóa tùy chọn đứng trước tên chức năng. Trong một trong hai trường hợp, các chức năng được gọi là của tên như thể nó là một lệnh nội bộ hoặc bên ngoài bình thường.Chức năng là rất hữu ích trong việc giúp đỡ để tạo ra mô-đun kịch bản. Ví dụ, nếu kịch bản của bạn cần phải thực hiện một nửa tá các tính toán khác biệt, bạn có thể đặt mỗi tính toán trong một hoạt động và sau đó gọi cho họ tất cả theo thứ tự. Danh sách 9.6 chứng tỏ việc sử dụng các chức năng trong một chương trình đơn giản sao chép một tập tin nhưng aborts với một thông báo lỗi nếu mục tiêu tập tin đã tồn tại. Kịch bản này chấp nhận một mục tiêu và một tên tập tin đích và phải vượt qua những tên tập tin đến các chức năng.Danh sách 9.6: Một kịch bản chứng minh việc sử dụng các chức năng#/ bin/bashdoit() {}CP $1 $2}chức năng check() {}Nếu [-s $2]sau đóecho "Tệp đích tồn tại! Thoát!"lối raFi}kiểm tra $1 $2doit $1 $2
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Viết Scripts 441
echo "/ tmp / tempstuff tìm thấy; hủy bỏ!
"exit
fi
đoạn này gây ra các kịch bản để thoát ra nếu các tập tin / tmp / tempstuffis hiện tại và lớn
hơn 0 byte. Các thenkeyword đánh dấu sự khởi đầu của một loạt các đường thẳng mà chỉ thực hiện nếu
có điều kiện là đúng, và fi (ifbackward) đánh dấu sự kết thúc của ifblock. Mã như vậy có thể
có ích nếu kịch bản tạo ra và sau đó xóa tập tin này, bởi vì sự hiện diện của nó chỉ ra
rằng một chạy trước của kịch bản đã không thành công hay vẫn được tiến hành.
Một hình thức thay thế cho một biểu thức điều kiện sử dụng testkeyword hơn là
dấu ngoặc vuông xung quanh các điều kiện:
nếu -s thử nghiệm / tmp / tempstuff
Bạn cũng có thể kiểm tra giá trị trả về của lệnh bằng cách sử dụng các lệnh như điều kiện:
nếu [command]
sau đó
thêm-lệnh
fi
Trong ví dụ này, thêm-commandswill được chỉ nếu commandcompletes chạy thành công. . Nếu commandreturns một mã lỗi, thêm-commandswon't được chạy
biểu thức có điều kiện có thể được mở rộng bằng cách sử dụng các elseclause:
nếu [có điều kiện biểu hiện]
sau đó
các lệnh
khác
khác-lệnh
fi
Mã của hình thức này gây ra hoặc commandsor khác-commandsto thực , tùy thuộc vào
việc đánh giá các điều kiện thể hiện. Điều này rất hữu ích nếu somethingshould xảy ra trong
một phần của chương trình mà chính xác là những gì nên xảy ra phụ thuộc vào một số điều kiện. Ví
dụ, bạn có thể muốn để khởi động một trong hai chương trình tập tin lưu trữ khác nhau tùy thuộc
vào đầu vào của người dùng.
Bạn làm gì nếu có nhiều hơn hai kết quả là có thể cho ví dụ, nếu một người sử dụng có thể
cung cấp bất kỳ một trong bốn yếu tố đầu vào có thể? Bạn có thể lồng nhiều nếu / rồi / elseclauses, nhưng điều này
được vụng rất nhanh chóng. Một cách tiếp cận sạch hơn là sử dụng trường hợp:
trường hợp từ trong
pattern1) lệnh (s) ;;
pattern2) lệnh (s) ;;
...
esac
442 Chương 9 ■ Scripts Viết, Cấu hình Email, và sử dụng cơ sở dữ liệu
Đối với một casestatement, một wordis có khả năng là một biến, và mỗi patternis một thể
giá trị của biến đó. Các mô hình có thể được mở rộng giống như tên tập tin, sử dụng cùng
các kí hiệu và quy tắc mở rộng (* đứng cho bất kỳ chuỗi, ví dụ). Bạn có thể phù hợp với một
số tùy ý của mô hình theo cách này. Mỗi tập hợp các câu lệnh phải kết thúc với một đôi
dấu chấm phẩy (;;), và các casestatement như một tổng thể kết thúc trong chuỗi esac (casebackward).
Khi thực hiện, bashexecutes các lệnh liên quan đến mô hình đầu tiên để phù hợp với
các từ. Thực hiện sau đó nhảy đến dòng sau esacstatement; bất kỳ can thiệp
lệnh không thực hiện. Nếu không có mô hình phù hợp với các văn bản, không có mã trong casestatement
thực hiện. Nếu bạn muốn có một điều kiện mặc định, sử dụng * như các mẫu thức; mô hình này
phù hợp với bất kỳ từ nào, vì vậy các lệnh của nó sẽ thực thi nếu không có patternmatches khác.
Sử dụng Loops
biểu thức điều kiện đôi khi được sử dụng trong vòng lặp. Loops là các cấu trúc cho các
kịch bản để thực hiện các nhiệm vụ cùng một lần cho đến khi một số điều kiện được đáp ứng (hoặc cho đến khi điều kiện là không còn đáp ứng). Ví dụ, Liệt kê 9.5 cho thấy một vòng lặp đóng tất cả các .wavaudio
tập tin trong một thư mục.
Listing 9.5: Một kịch bản thực thi một lệnh trên mỗi tập hợp trong một thư mục
# / bin / bash!
Cho d trong `ls * .wav` ; làm
aplay $ d
thực hiện
Các aplaycommand là một cầu thủ tập tin âm thanh cơ bản làm việc với các
chi tiết Linux Sound Kiến trúc (ALSA) trình điều khiển âm thanh. Trên một số hệ thống, bạn có thể cần phải sử dụng playor một số lệnh khác thay vì aplay.
Các forloop như được sử dụng ở đây thực hiện một lần cho tất cả các mục trong danh sách được tạo ra bởi ls * .wav.
Mỗi của những mặt hàng (tên tập tin) được gán lần lượt đến $ dvariable và như vậy được thông qua với
aplaycommand.
Các seqcommand có thể hữu ích trong việc tạo ra forloops (và theo những cách khác, quá): Đây
lệnh tạo ra một danh sách các số bắt đầu từ số đầu tiên của mình và tiếp tục của nó
cuối cùng. Ví dụ, gõ seq 1 10generates 10 dòng, mỗi dòng có một số nằm giữa 1
và 10. Bạn có thể sử dụng một forloop bắt đầu cho x trong `seq 1 10`to đã vòng lặp thực hiện
10 lần, với các giá trị của $ xincrementing với mỗi lần lặp . Nếu bạn vượt qua chỉ là một tham số để seq, nó diễn giải số đó như một điểm kết thúc, với điểm xuất phát là 1. Nếu
bạn vượt qua ba giá trị để seq, nó diễn giải chúng như là một giá trị bắt đầu, một số lượng tăng lên,
và một giá trị kết thúc.
Một loại vòng lặp là whileloop, mà thực hiện cho đến khi tình trạng của nó là
sự thật. Các hình thức cơ bản của loại vòng này là như thế này:
Scripts Viết 443
trong khi [điều kiện]
làm
lệnh
thực hiện
các untilloop là tương tự về hình thức, nhưng nó vẫn tiếp tục thực hiện cho đến khi tình trạng của mình
là sai-có nghĩa là, cho đến khi điều kiện trở thành sự thật.
Sử dụng các hàm
A functionis một phần của một kịch bản thực hiện một subtask cụ thể và có thể được gọi bằng
tên từ các bộ phận khác của kịch bản. Các hàm được định nghĩa bằng cách đặt dấu ngoặc đơn sau
tên hàm và kèm theo các đường tạo ra các chức năng trong dấu ngoặc nhọn:
myfn () {lệnh} Các functionmay từ khóa tùy chọn trước tên hàm. Trong cả hai trường hợp, các chức năng được gọi bằng cái tên như thể nó là một lệnh nội bộ hoặc bên ngoài bình thường. Chức năng này rất hữu ích trong việc giúp đỡ để tạo ra các kịch bản mô-đun. Ví dụ, nếu kịch bản của bạn cần thực hiện một nửa tá các tính toán riêng biệt, bạn có thể đặt từng tính toán trong một hàm và sau đó gọi tất cả chúng theo thứ tự. Bảng liệt kê 9.6 cho thấy việc sử dụng các chức năng trong một chương trình đơn giản mà các bản sao một tập tin nhưng hủy bỏ với một thông báo lỗi nếu tập tin đích đã tồn tại. Kịch bản này chấp nhận một mục tiêu và một tên tập tin đích và phải vượt qua những tên tập tin đến các chức năng. Listing 9.6: Một kịch bản chứng minh việc sử dụng các chức năng # / bin / bash số tiền rất ít () {cp $ 1 $ 2} chức năng kiểm tra () {if [-s $ 2] sau đó echo "tập tin mục tiêu tồn tại! Thoát khỏi! "Exit fi} kiểm tra $ 1 $ 2 số tiền rất ít $ 1 $ 2























đ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: