Shell基本元素
(1)#! /bin/bash 必须的,指出shell的类型 (2)# 注释 (3)变量 (4)控制 一个shell脚本 vi mkdir.sh #!/bin/bash # this is mkdir cd /home mkdir shellTest echo "shellTest is created."
1.echo命令用于在屏幕上显示消息 使用方式:echo 要显示的内容 2.#用于在shell脚本中进行注释
Shell的一般结构
shell 类型 函数 主过程 一般模板 abc.sh #! /bin/bash shell类型 #a simple shell script example #a function sayhello() 函数 { echo "Enter Your name:" read name 读取来自键盘输入的变量 echo "Hello $name" } echo "programme starts here..." 主过程 sayhello echo "programme ends."
Shell中的特殊符号
1、注释符# 除了#!/bin/bash里的#特殊 2、美元符 $ 变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来 3、单引号 被引起的字符全部做普通字符,即全部原样 echo ‘my $SHELL’ 4、双引号 引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。 5、倒引号(数字1键旁边的那个键) 引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分。 `pwd` 即pwd命令的执行结果 $LOGNAME 系统变量 区别下面几句: echo ‘my home is $HOME’ echo “my home is $HOME” echo `my home is $HOME` echo “my home is `pwd`” echo ‘my home is `pwd`’ 6. 反斜线 反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。、 echo “Filename is N0\$\`”
变量
创建变量
1、可以在任何时间通过简单的赋值来创建变量 语法: <variable name>=<value> Shell中的所有变量都被当作字符串 2、引用变量 $符号用于引用一个变量的内容 variable1=${variable2} 3、在执行shell脚本时,shell还允许用户从键盘中输入一个值给变量。可以使用read命令来做。 read fname
命令替换
1、在单个命令行中使用多个命令的一个方法是通过命令替换
例:echo "The date is `date`" 2、expr命令:用于求值算术表达式。该命令输出被发送到标准输出 例:expr 4+5 将在屏幕上显示9 3、可以在$((...))中包括一个表达式,用下面的命令来计算它的值: $((表达式)) 实验:编写一个简单的四则计算器 echo "Please enter the first number." read totalqueries echo "Please enter the second number." read answered echo "Please enter the operation." read opt result=$((totalqueries $opt answered)) echo "the result of $totalqueries $opt $answered=$result"
条件判断命令
test n1 -参数 n2 (或 –参数 表达式) [ n1 -参数 n2 ] 真返回0,假返回1。 参数: -lt 小于 -le小于等于 -gt 大于 -ge 大于等于 -eq 等于 -ne 不等于 ·test语句的等价形式[ 1 –lt 4 ] 可用中括号代替test,把表达式括起来实现判断 注意表达式与中括号间有空格。 test 1 –lt 4 #判断1<4 echo $? #结果为0
文件测试
-f 存在且是普通文件 -d 存在且是目录 -s 存在且字节数大于0 -r 存在且可读 -w 存在且可写 -x 存在且可执行 如:test -d “mydoc” [ -d "mydoc" ] 判断mydoc是否是目录 eg:检测从命令行输入的文件是否存在 if [ $# -ne 1 ] then echo "usage -$0 file-name" exit 1 fi if [ -f $s1 ]
字符串测试
test s 字符串s非空 test s1=s2 字符串s1等于s2 test s1!=s2 字符串s1不等于s2 test -z s 字符串长=0,即为空串 test -n s 字符串长>0 =: 等于则为真 !=:不相等则为真 -z字符串:字符串长度为零则为真 -n字符串:字符串长度不为零则为真
分支语句
if [ $# -eq 0 ] then echo “输入了0个参数” elif [ $# -gt 1 ] then echo “输入了多个参数” else echo “输入了1个参数” fi
case “$#” in 0) echo “输入了0个参数” ;; 1) echo “输入了1个参数” ;; *) echo “输入了多个参数”;; esac 每个分支条件后必须以两个分号结尾
循环语句
只有条件为真时,就执行do和done之前的命令 while <条件> do <命令(s)> done while例子——求1到100的和 declare -i i=1 sum=0 while [ $i –le 100 ] do sum=$[$sum+$i] i=$[$i+1] done echo $sum
for循环取一列值作为输入并对循环中每个值执行循环 for variable_name in <list_of_values> do ... done for i in `seq 1 9` do echo `expr $i \* 10` done 或写 echo $(expr $i \* 10) 乘号前加转义符,与数字间要有空格。
Read变量
read 变量1 [变量2 …] 可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔。 如果输入的数据个数不够,则从左到右对应赋值,没有输入的变量为空; 如果输入的数据个数超了,则从左到右对应赋值,最后一个变量被赋予剩余的所有数据。 输出a到b序列数各数的10倍数 read a b for i in `seq $a $b` do echo `expr $i \* 10` done