shell编程基础知识

本文详细介绍了Linux shell scripting的基础知识,包括变量使用、运算、输入输出、返回值与逻辑测试,以及条件判断与循环实现。通过实例展示了如何有效利用shell脚本进行文件操作与逻辑处理。
 
   参考书籍: Linux随身指南   DANIEL J. BARRETT 著  OREILLY
1.变量
变量让你用一个名称来代表某种意义的数值或字符串
  1. $ MYNAME="Merlin"
  2. $ MYAGE="19"
  3. $ echo $MYNAME $MYAGE
  4. Merlin 19

对变量进行运算
  1. $ NUMBER="10"
  2. $ expr $NUMBER + 5 (+符号的左右两侧至少要有一个空格)
  3. 15

当变量值里含有空格时,在shell script里表示变量值时,应该用双引号界定,如果没有双引号,就可能引发意想不到的后果
假如你在当前目录下有一个叫My Document的子目录,My Document下包含TEST1,TEST2两个文件
  1. $ FILENAME="My Document"
  2. $ ls $FILENAME
  3. ls: My: No such file or directory
  4. ls: Document: No such file or directory (ls 看到了两个参数)
给FILENAME加上双引号之后,问题就解决了
  1. FILENAME="My Document"
  2. ls "$FILENAME"
  3. TEST1  TEST2


如果变量名与另一个字符串紧接在一起,这必须以一对花括号界定

  1. $ FRUIT="banana"
  2. $ echo "I have a lot of $FRUITs"
  3. I have a lot of  (没有正确显示出bananas)
  1. $ FRUIT="banana"
  2. $ echo "I have a lot of ${FRUIT}s"
  3. I have a lot of bananas  (加了花括号后得到了正确的结果)

2.输入于输出
shell script的输出主要是由echo与printf命令提供的
  1. $ echo "Hello Dog"
  2. Hello Dog
  3. $ printf "I am %d years old \n" `expr 200 + 200`
  4. I am 400 years old

shell script的输入主要是靠read命令来取得的,它每次从stdin读入一行数据,并将其存入一个变量中
  1. $ read myname
  2. Merlin
  3. $ echo "$myname is a superman"
  4. Merlin is a superman

3. 返回值(return value)与逻辑测试(Boolean test)
任何Linux命令结束时,都会返回一个代表运行结果的整数值给shell,此值称为"返回值"(return value).你可以用$?来表示返回值:
  1. $ cat myfile
  2. I am a air bag
  3. $ grep air myfile
  4. I am a air bag
  5. $ echo $?
  6. 0
  7. $ grep pig myfile
  8. $ echo $?
  9. 1
许多Linux命令的返回值具有特殊含义,唯一可以确定的是,返回值0一定代表成功,因为这是所有Linux命令的共识.

test
对于只涉及数值和字符串的逻辑表达式,可用bash shell内置的test命令来计算其逻辑值,如果计算结果"真",则test返回0,否则返回1.
  1. $ test 10 -lt 5   (10<5?)
  2. $ echo $?
  3. 1     (结果当然是假)
  4. $ test -n "hello"   ("hello"字符串的长度不为零?)
  5. $ echo $?
  6. 0     (长度当然不是0)

test有一个别名就是"[" "]",以便用于条件判断与循环中,下列代码和上一段代码完全等效
  1. $ [ 10 -lt 5 ]
  2. $ echo $?
  3. 1
  4. $ [ -n "hello" ]
  5. $ echo $?
  6. 0
"[" "]"是命令,和其他命令一样,在命令名称与各个参数之间至少要保持一个空格的间隔

true与false
bash内置两个于bool值有关的命令:true与false,他们唯一的作用是分别返回0与1
  1. $ true
  2. $ echo $?
  3. 0
  4. $ false
  5. $ echo $?
  6. 1
这两个命令主要用于条件判断与循环中

4.条件判断
最简单的if语句形式是if - then
语法如下
  1. if command
  2. then
  3.     body
  4. fi
范例
  1. $ if [ `whoami` = "root" ]
  2. > then
  3. > echo "You can do everything here"
  4. > fi
另一种形式是if - then - else
语法如下
  1. if command
  2. then
  3.     body1
  4. else
  5.     body2
  6. fi
范例
  1. $ if [ `whoami` ] = "root" ]
  2. > then
  3. > echo "You can do everything here"
  4. > else
  5. > echo "You can't eat my food"
  6. > fi
最复杂的形式是if - then - elif - ..... - elif - else
语法如下
  1. if command1
  2. then
  3.     body1
  4. elif command2
  5. then
  6.     body2
  7. elif ...
  8. ...
  9. else
  10.    bodyN
  11. fi
  1. $ read number
  2. $ if [ $number = 3 ]
  3. > then
  4. > echo "number is 3"
  5. > elif [ $number = 6 ]
  6. > then
  7. > echo "number is 6"
  8. > elif [ $number = 5 ]
  9. > then
  10. > echo "number is 5"
  11. > else
  12. > echo "not 3,6 or 5"
  13. > fi


case语句
case语句的标准语法是
  1. case string in
  2.     expr1)
  3.         body1
  4.         ;;
  5.     expr2)
  6.         body2
  7.         ;;
  8.     ...
  9.     exprN)
  10.         bodyN
  11.         ;;
  12.     *)
  13.         bodyelse
  14.         ;;
  15. esac
其中的string可以是任何值,expr1,expr2... exprN是测试结果的模式,而最后的"*"代表前述模式都不匹配时应该选择的分支命令,每一组命令集合都必须以;;结束,下面是一个例子
  1. $ case $letter in
  2. > X)
  3. > echo "letter is an X"
  4. > ;;
  5. > [aeiou])
  6. > echo "letter is a vowel"
  7. > ;;
  8. > [0-9])
  9. > echo "letter is a digit"
  10. > ;;
  11. > *)
  12. > echo "I can not handle that"
  13. > ;;
  14. > esac
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值