Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1547827
  • 博文数量: 1481
  • 博客积分: 26784
  • 博客等级: 上将
  • 技术积分: 17045
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-12 09:22
文章分类

全部博文(1481)

文章存档

2014年(10)

2013年(353)

2012年(700)

2011年(418)

分类: IT业界

2011-07-20 13:31:16

[常用]Shell 命令和语句
1. read命令:从键盘读入数据,赋给变量
# read USERNAME
范例:
  1. #!/bin/sh
  2. read first second third
  3. echo "the first parameter is $first"
  4. echo "the second parameter is $second"
  5. echo "the third parameter is $third"


2. expr 命令:对整数型变量进行算术运算。
语法:
# expr Num1 + Num2
-
\* 需要转义
/
示例:[conde]
expr $var1 – 5
expr $var1 / $var2
expr $var3 \* 10
expr `expr 5 + 7` / $var4 * 复杂的运算
var4=`expr $var1 / $var2`
[conde]

3. test 语句:变量测试语句,用于测试变量是否相等、是否为空、文件类型等。
# test 测试条件
测试范围:整数、字符串、文件
a) 整数测试
test INT1 –eq INT2 测试整数是否相等(INT1 is equal to INT2)
test INT1 –ge INT2 测试INT1是否>=INT2 (INT1 is greater than or equal to INT2)
test INT1 –gt INT2 测试INT1是否>INT2(INT1 is greater than INT2)
test INT1 –le INT2 测试INT1是否= test INT1 –lt INT2 测试INT1是否 test INT1 –ne INT2 测试整数是否不相等(INT1 is not equal to INT2)
b) 字符串测试
test STR1=STR2 测试字符串是否相等
test STR1!=STR2 测试字符串是否不相等
test STR1 测试字符串是否不为空
test –n STR1 测试字符串是否不为空
test –z STR1 测试字符串是否为空
c) 文件测试
test –d FILE 指定文件是否目录
test –f FILE 指定文件是否常规文件
test –x FILE 指定文件是否可执行
test –r FILE 指定文件是否可读
test –w FILE 指定文件是否可写
test –a FILE 指定文件是否存在
test –s FILE 文件的大小是否非0
d) 变量测试语句:一般不单独使用,一般做为if语句的测试条件,如
if test –d $1 then

fi
说明:测试$1是否为目录
简化:变量测试语句可用[ ]进行简化,如test –d $1 等价于 [ -d $1 ]
e) 范例1:判断两个数的大小
代码
  1. #!/bin/sh
  2. if [ $# -ne 2 ]; then # 判断此脚本参数的个数是否等于2
  3. echo "Not enough parameters"
  4. exit 0
  5. fi
  6. if [ $1 -eq $2 ]; then
  7. echo "$1 equals $2"
  8. elif [ $1 -lt $2 ]; then
  9. echo "$1 littler than $2"
  10. elif [ $1 -gt $2 ]; then
  11. echo "$1 greater than $2"
  12. fi

执行:
  1. [root@linux example]# sh test 1 1
  2. 1 equals 1
  3. [root@linux example]# sh test 1 2
  4. 1 littler than 2
  5. [root@linux example]# sh test 2 1
  6. 2 greater than 1

f) 范例2:测试apache是否启动

代码:
  1. #!/bin/sh
  2. # "if...else" usage
  3. # Using this program to show your system's services.
  4. echo "Now, the web services of this Linux system will be detect..."
  5. echo
  6. # Detect www service
  7. web=`/usr/bin/pgrep httpd` # 查找httpd的PID
  8. if [ "$web" != "" ] # 判断查找结果
  9. then
  10. echo "The Web service is running."
  11. else
  12. echo "The Web service is NOT running."
  13. /etc/rc.d/init.d/httpd start # 启动Apache服务
  14. fi

流程控制语句:用于控制shell程序的流程
4. exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。
语法:exit 0
5. if 语句
if...then...fi
范例:从新启动apache服务
  1. #!/bin/sh
  2. if [ -x /etc/rc.d/init.d/httpd ] # 等价于if [ test –x /etc/init.d/http ]
  3. then
  4. /etc/rc.d/init.d/httpd restart
  5. fi

6. if...else 语句
语法:
if 条件1 than
命令1
elif 条件2 then
命令2
else
命令3
fi
其他:多个条件的联合
-a:逻辑与,仅当两个条件都成立时,结果为真。
-o:逻辑或,两个条件只要有一个成立,结果为真。

范例:
  1. #!/bin/sh
  2. echo "please input a file name: "
  3. read file_name # 获取文件名
  4. if [ -d $file_name ] # 检测是否为目录
  5. then
  6. echo "$file_name is a directory"
  7. elif [ -f $file_name ] # 是否为普通的文件
  8. then
  9. echo "$file_name is a common file"
  10. elif [ -c $file_name -o -b $file_name ] # 是否为 设备或
  11. then
  12. echo "$file_name is a device file"
  13. else
  14. echo "$file_name is an unknown file" # 不知道
  15. fi

7. for ... done 语句
语法:
for 变量 in 名字表
do
命令列表
done
范例:
  1. #!/bin/sh
  2. for DAY in Sunday Monday Tuesday Wednesday Thursday Friday Saturday ABC # 一次匹配in后面的值
  3. do
  4. echo “The day is : $DAY”
  5. done

8. select 语句
语法:
select 变量 in 关键字
do
command 1

command n

done
说明:select把关键字中的每一项做成类似表单,以交互的方式执行do和done之间的命令。
范例:
  1. #!/bin/sh
  2. # "select" Usage
  3. echo "What is your favourite OS?"
  4. select var in "Linux" "UNIX" "Windows" "Other" "Mac" # 选择的数赋给变量var
  5. do
  6. break
  7. done
  8. echo "You have selected $var"

执行结果:
  1. [root@linux example]# sh select # 类似表单的选择
  2. What is your favourite OS?
  3. 1) Linux
  4. 2) UNIX
  5. 3) Windows
  6. 4) Other
  7. 5) Mac
  8. #? 5
  9. You have selected Mac
  10. [root@linux example]#

9. case...esac 语句
语法:
case 变量 in
字符串1) 命令列表1
;;
...
字符串n) 命令列表n
;;
esac
范例1:
  1. #!/bin/sh
  2. echo "*******************************"
  3. echo "Please select your operation:"
  4. echo " Press "C" to Copy"
  5. echo " Press "D" to Delete"
  6. echo " Press "B" to Backup"
  7. echo "*******************************"
  8. read op # 键盘获取字符
  9. case $op in # $op 匹配下面的字符串,匹配成功执行其下的相应命令
  10. C)
  11. echo "your selection is Copy"
  12. ;;
  13. D)
  14. echo "your selection is Delete"
  15. ;;
  16. B)
  17. echo "your selection is Backup"
  18. ;;
  19. *)
  20. echo "invalide selection"
  21. esac

执行结果:
  1. [root@linux example]# sh case
  2. *******************************
  3. Please select your operation:
  4. Press C to Copy
  5. Press D to Delete
  6. Press B to Backup
  7. *******************************
  8. D
  9. your selection is Delete
  10. [root@linux example]#

范例2:select与case结合使用
  1. #!/bin/bash
  2. # "select" "case" Usage
  3. echo "a is 5, b is 3. Please select you method: "
  4. a=5
  5. b=3
  6. select var in "a+b" "a-b" "a*b" "a/b" # 从中选择方法赋给var
  7. do
  8. break
  9. done
  10. case $var in # 匹配字符串,执行相应的代码
  11. "a+b") echo 'a+b='`expr $a "+" $b`;;
  12. "a-b") echo 'a-b='`expr $a "-" $b`;;
  13. "a*b") echo 'a*b='`expr $a "*" $b`;;
  14. "a/b") echo 'a/b='`expr $a "/" $b`;;
  15. *) echo "input error..."
  16. esac

执行结果:
  1. [root@linux example]# sh select.case
  2. a is 5, b is 3. Please select you method:
  3. 1) a+b
  4. 2) a-b
  5. 3) a*b
  6. 4) a/b
  7. #? 2 # 选择2的计算方法
  8. a-b=2
  9. [root@linux example]#

10. while 语句
语法:
while 条件
do
命令
done
范例:
  1. #!/bin/sh
  2. num=1
  3. while [ $num -le 10 ] # 判断$num 是否=<10
  4. do
  5. SUM=`expr $num \* $num` # 执行乘法
  6. echo $SUM
  7. num=`expr $num + 1`
  8. done

11. until 语句
语法:
until 条件
do
命令
done
说明:until类似while循环,不同的是until是条件返回值为假时才继续执行。
范例1:
  1. #!/bin/sh
  2. until [ -x /etc/inittab ] # 判断/etc/inittab是否为可执行文件,不是执行do里面的语句
  3. do
  4. /bin/ls -l /etc/inittab
  5. exit 0
  6. done

范例2:until和read的结合,判断输入的字符,直到正确时循环退出
  1. #!/bin/bash
  2. # "read" "until" usage
  3. echo "Press Y/y to stop..."
  4. read input # 获取字符
  5. until [ "$input" = "Y" ] || [ "$input" = "y" ] # 判断后面的语句是否为真,为假时执行do…
  6. do
  7. echo "error input,please try again..."
  8. read input
  9. done
  10. echo "Stop here!"

关于:[ "$input" = "Y" ] || [ "$input" = "y" ],有一个为真,即为真。全部为假时即为假。


原文地址:
阅读(371) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~