(新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

sh/bash/dash/ksh/zsh等Shell脚本
回复
mercurysatans
帖子: 3
注册时间: 2009-03-14 20:55

(新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#1

帖子 mercurysatans » 2009-03-18 3:35

正在学习shell方面的知识, :em20 一直在看,但是还是难免会有很多东西不是很理解的透彻,所以不浪费时间,就弱弱的跑出来问问了~! 首先申明,我不是没有认真看阿,是我认真看了之后实在不明白这用法,所以 就那出来找高手帮忙指点迷经,各位高手多多包涵~!
看了 一个 关于 case的用法的,不明白上面说的那个东西怎么套用

case ... in
...) do something here ;;
esac

这个之后,给的例子就更不明白了,
1。首先用法里面 没说case后面跟的变量值确定的情况 怎么执行,
2 。然后那个莫名奇妙的半个括号是必须的么 ?为什么例题里面还要带星号?
3。do后面跟的是这些情况之外的东西还是说 case的变量在in后面的表达式中do后面的东西?
4。那个;; 什么情况下用阿, 什么意思 什么时候单,什么时候双阿?
那最后的esac是什么缩写阿,为了记忆 还是 问下 嘿嘿 :em06

#!/bin/sh

ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) echo "File $1 can not be uncompressed with smartzip";;
esac


努力学习~! 我会加油的~! :em11

附加问题:在看select的用法,觉得挺好用的,但是有点不明白,select 中in后面的选项个数决定了我选择的范围,但是如果为选择了超出这个范围的选择,怎样让他显示错误然后提示重新选择呢
比如说
#!/bin/sh

echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
    break;
done
echo "You have selected $var"
有4个选项,分别对应了1-4,如果我选了5,后面就不会显示了,所以 希望知道 怎样用啦~! :em06 :em01
头像
kqueenc
帖子: 630
注册时间: 2007-05-27 20:29

Re: (新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#2

帖子 kqueenc » 2009-03-18 5:18

首先,先了解一下file命令的作用,是判别文件的类型的,命令格式为:
file filename
输出为:
filename: bzip2 compressed data, block size.......

这样就很容易明白这段SCRIPT的意思了。
如果参数是ZIP文件,就使用UNZIP解压,如果是GZIP的话,就用BZIP2解压,如果是其他类型,就不解压,输出提示。

至于esac,请你颠倒过来看一下。

另外,你的问题,尤其是第3条,我看不太明白,可能是我的中文理解力比较差吧。看来不仅要学好数理化,祖国的语言也同样要跟上啊。
头像
city0011
帖子: 91
注册时间: 2009-03-10 22:17
联系:

Re: (新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#3

帖子 city0011 » 2009-03-18 14:37

这个程序就是 先判断下文件的类型
如果是第一种 的话
解压
第二种 的话
另一种 解压方式
否则 则 ERROR

两个 分号;;表示一个CASE情况的结束
右半扩号这一行表示 CASE的情况~~ : :em11

我也刚学~~~ 加油喽~~
if u like
just do it
mercurysatans
帖子: 3
注册时间: 2009-03-14 20:55

Re: (新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#4

帖子 mercurysatans » 2009-03-18 14:47

kqueenc 写了:首先,先了解一下file命令的作用,是判别文件的类型的,命令格式为:
file filename
输出为:
filename: bzip2 compressed data, block size.......

这样就很容易明白这段SCRIPT的意思了。
如果参数是ZIP文件,就使用UNZIP解压,如果是GZIP的话,就用BZIP2解压,如果是其他类型,就不解压,输出提示。

至于esac,请你颠倒过来看一下。

另外,你的问题,尤其是第3条,我看不太明白,可能是我的中文理解力比较差吧。看来不仅要学好数理化,祖国的语言也同样要跟上啊。
thanks~!merci~!谢谢拉~!
可能就是我的表达不好啦~!见谅,呵呵 :em02
看来我要学的还有好多哦! :em20


再弱弱 的问一句哦~! 那个括号前面的星星是啥子意思~!? :em06
mercurysatans
帖子: 3
注册时间: 2009-03-14 20:55

Re: (新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#5

帖子 mercurysatans » 2009-03-18 14:49

city0011 写了:这个程序就是 先判断下文件的类型
如果是第一种 的话
解压
第二种 的话
另一种 解压方式
否则 则 ERROR

两个 分号;;表示一个CASE情况的结束
右半扩号这一行表示 CASE的情况~~ : :em11

我也刚学~~~ 加油喽~~
共同努力~! :em11
是不是就是说 那个右半括号之前的是case的情况 do后面的是不符合以上情况时做的事情类?~ :em06
头像
city0011
帖子: 91
注册时间: 2009-03-10 22:17
联系:

Re: (新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#6

帖子 city0011 » 2009-03-18 15:07

mercurysatans 写了:
city0011 写了:这个程序就是 先判断下文件的类型
如果是第一种 的话
解压
第二种 的话
另一种 解压方式
否则 则 ERROR

两个 分号;;表示一个CASE情况的结束
右半扩号这一行表示 CASE的情况~~ : :em11

我也刚学~~~ 加油喽~~
共同努力~! :em11
是不是就是说 那个右半括号之前的是case的情况 do后面的是不符合以上情况时做的事情类?~ :em06

代码: 全选

  1 
  2 
  3 
  4 #!/bin/sh
  5 echo "What is your favourite OS?"
  6 select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
  7 echo "You have selected $var"
  8 break
  9   
 10 
 11 
 12 done
 13 exit 0
:em11
if u like
just do it
zgk120
帖子: 14
注册时间: 2009-03-06 10:25

Re: (新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#7

帖子 zgk120 » 2009-04-01 17:13

我运行楼上的程序,为什么出错啊?
What is your favourite OS?
./vim: 4: select: not found
You have selected
./vim: 8: Syntax error: "done" unexpected
312512229
帖子: 18
注册时间: 2009-03-31 22:23

Re: (新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#8

帖子 312512229 » 2009-04-01 20:23

我也是,谁能给解决下
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: (新人报道~!)有问题啦~!不是很明白~!shell 方面的 ~!

#9

帖子 billbear » 2009-04-01 20:33

select 应该用 #!/bin/bash 的
回复