banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Gặp lỗi với Case ... in ... khi viết Shell  XML
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 13/07/2010 09:39:32 (+0700) | #1 | 215224
Doorkeeper
Member

[Minus]    0    [Plus]
Joined: 20/05/2008 11:37:48
Messages: 74
Offline
[Profile] [PM] [WWW]
Em code đoạn shell script sau đây để đơn giản nhưng khi chạy lại bị lỗi trong phần case ... in ..., em đã kiểm tra thì thấy đúng cú pháp, nhưng không cách gì chạy được (báo sai cú pháp). Các anh xem giúp em tí, cám ơn các anh smilie
Code:
#!/bin/bash

echo 'Chon 1 trong nhung lua chon sau: '
read chon
case $chon in
1) { echo 'Dong thu nhat'
echo 'Dong thu hai' };;
*) echo 'Dong thu 3' ;;
esac

Thân,
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 13/07/2010 14:29:14 (+0700) | #2 | 215243
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Sao lại có cái ngoặc nhọn sau lựa chọn 1) vậy? Bạn thử mở mấy cái init script ra xem nó viết thế nào.
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 14/07/2010 05:01:01 (+0700) | #3 | 215268
Doorkeeper
Member

[Minus]    0    [Plus]
Joined: 20/05/2008 11:37:48
Messages: 74
Offline
[Profile] [PM] [WWW]
Tại em nghe nói chúng ta có thể đóng khối lệnh nên mới dùng cái đó. Đúng là sau khi thay hai cái { và } thành && sau mỗi lệnh thì lại được smilie
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 14/07/2010 12:32:01 (+0700) | #4 | 215306
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

Doorkeeper wrote:
Tại em nghe nói chúng ta có thể đóng khối lệnh nên mới dùng cái đó. Đúng là sau khi thay hai cái { và } thành && sau mỗi lệnh thì lại được smilie 

Sao lại phải thay thành && vậy?
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 14/07/2010 20:12:30 (+0700) | #5 | 215340
[Avatar]
vltn
Member

[Minus]    0    [Plus]
Joined: 13/07/2010 23:09:11
Messages: 74
Location: V9F
Offline
[Profile] [PM] [WWW]
Vì && nghĩa là kết hợp nhiều lệnh với nhau thành một lệnh dài, dùng trong trường hợp shell yêu cầu chỉ được dùng một lệnh, ví dụ là trong case .. in smilie

Không biết có gì sai không nhỉ smilie
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 14/07/2010 20:30:33 (+0700) | #6 | 215341
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

vltn wrote:
Vì && nghĩa là kết hợp nhiều lệnh với nhau thành một lệnh dài, dùng trong trường hợp shell yêu cầu chỉ được dùng một lệnh, ví dụ là trong case .. in smilie
 

Code:
$ command1 && command2

--> có sự phụ thuộc nào giữa command2 và command1 không?

Mà với đoạn script ở trên, thay {} thành && thì như thế nào nhỉ?
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 14/07/2010 20:53:41 (+0700) | #7 | 215349
[Avatar]
vltn
Member

[Minus]    0    [Plus]
Joined: 13/07/2010 23:09:11
Messages: 74
Location: V9F
Offline
[Profile] [PM] [WWW]
Theo mình biết là không có sự phụ thuộc giữa command2 và command1, smilie
Code:
#!/bin/bash
 
 echo 'Chon 1 trong nhung lua chon sau: '
 read chon
 case $chon in
 1) echo 'Dong thu nhat' &&
 echo 'Dong thu hai' ;;
 *) echo 'Dong thu 3' ;;
 esac

Edit lại thành vậy lại chạy smilie
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 14/07/2010 21:09:26 (+0700) | #8 | 215352
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

vltn wrote:
Theo mình biết là không có sự phụ thuộc giữa command2 và command1, smilie
 

Vậy bạn thử tìm hiểu kỹ lại nhé.

vltn wrote:

Code:
#!/bin/bash
 
 echo 'Chon 1 trong nhung lua chon sau: '
 read chon
 case $chon in
 1) echo 'Dong thu nhat' &&
 echo 'Dong thu hai' ;;
 *) echo 'Dong thu 3' ;;
 esac

Edit lại thành vậy lại chạy smilie 

Bỏ && đi nó có chạy không?
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 15/07/2010 16:35:03 (+0700) | #9 | 215423
[Avatar]
vltn
Member

[Minus]    0    [Plus]
Joined: 13/07/2010 23:09:11
Messages: 74
Location: V9F
Offline
[Profile] [PM] [WWW]
Vậy bạn thử tìm hiểu kỹ lại nhé.
 

Trong các mệnh đề điều kiện nếu dùng && thì điều kiện sẽ đúng khi command cuối cùng đúng, không biết phải không nhỉ ? smilie
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 15/07/2010 17:15:18 (+0700) | #10 | 215425
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

vltn wrote:
Vậy bạn thử tìm hiểu kỹ lại nhé.
 

Trong các mệnh đề điều kiện nếu dùng && thì điều kiện sẽ đúng khi command cuối cùng đúng, không biết phải không nhỉ ? smilie 

Vẫn chưa đúng bạn à.
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 15/07/2010 21:16:46 (+0700) | #11 | 215445
[Avatar]
nhanth87
Member

[Minus]    0    [Plus]
Joined: 12/08/2009 08:54:00
Messages: 168
Offline
[Profile] [PM]
Nếu dùng && thì sau khi lệnh 1 kết thúc sẽ chạy tiếp lệnh thứ 2.
vd như: ./configure && make && make install (quen quá nhỉ smilie?)
Aricent - Software Engineer
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 15/07/2010 21:23:33 (+0700) | #12 | 215446
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

nhanth87 wrote:
Nếu dùng && thì sau khi lệnh 1 kết thúc sẽ chạy tiếp lệnh thứ 2.
 

Vẫn sai.
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 15/07/2010 22:00:45 (+0700) | #13 | 215449
vietwow
Member

[Minus]    0    [Plus]
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
[Profile] [PM]

quanta wrote:

nhanth87 wrote:
Nếu dùng && thì sau khi lệnh 1 kết thúc sẽ chạy tiếp lệnh thứ 2.
 

Vẫn sai. 


Lệnh thứ nhất thực hiện success thì mới thực hiện tiếp lệnh 2, ngược lại thì ko smilie
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 16/07/2010 19:12:36 (+0700) | #14 | 215500
[Avatar]
vltn
Member

[Minus]    0    [Plus]
Joined: 13/07/2010 23:09:11
Messages: 74
Location: V9F
Offline
[Profile] [PM] [WWW]
Vậy quanta giải thích kĩ về cái && cho mọi người cùng hiểu đi smilie
[Up] [Print Copy]
  [Discussion]   Gặp lỗi với Case ... in ... khi viết Shell 16/07/2010 19:21:32 (+0700) | #15 | 215507
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

vltn wrote:
Vậy quanta giải thích kĩ về cái && cho mọi người cùng hiểu đi smilie 

Bạn vietwow trả lời rồi đó thôi.
Let's build on a great foundation!
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|