一.echo命令


echo 指令都是用于字符串的输出。命令格式:


echo "It is a test"



1.1显示换行


echo -e "OK! \n" # -e 开启转义 \n换行echo "It it a test"



1.2.显示不换行


echo -e "OK! \c" # -e 开启转义 \c 不换行echo "It is a test"



1.3显示结果定向至文件


echo "It is a test" > myfile



1.4显示命令执行结果


echo `date`


注意: 这里使用的是反引号 `, 而不是单引号 '。


Thu Jul 24 10:08:46 CST 2014


二.printf 命令


标准所定义,因此使用printf的脚本比使用echo移植性好。


printf 使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认printf不会像 echo 自动添加换行符,我们可以手动添加 \n。


http://www.runoob.com/linux/linux-shell-printf.html


三.test 命令


Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。


3.1数值测试


参数

说明

-eq

等于则为真

-ne

不等于则为真

-gt

大于则为真

-ge

大于等于则为真

-lt

小于则为真

-le

小于等于则为真



例:


num1=100 num2=100 if test $[num1] -eq $[num2] then echo '两个数相等!' else echo '两个数不相等!' fi


3.2字符串测试


参数

说明

=

等于则为真

!=

不相等则为真

-z 字符串

字符串的长度为零则为真

-n 字符串

字符串的长度不为零则为真



例:


num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi


3.3文件测试


参数

说明

-e 文件名

如果文件存在则为真

-r 文件名

如果文件存在且可读则为真

-w 文件名

如果文件存在且可写则为真

-x 文件名

如果文件存在且可执行则为真

-s 文件名

如果文件存在且至少有一个字符则为真

-d 文件名

如果文件存在且为目录则为真

-f 文件名

如果文件存在且为普通文件则为真

-c 文件名

如果文件存在且为字符型特殊文件则为真

-b 文件名

如果文件存在且为块特殊文件则为真



例:


cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi


Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低


四.shell流程控制


1.if else



if else-if else



if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi



以下实例判断两个变量是否相等:



a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi



2.for 循环



for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done



例如,顺序输出当前列表中的数字:



for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done



输出结果:



The value is: 1



The value is: 2



The value is: 3



The value is: 4



The value is: 5



3.while 语句



while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:



while condition
do
    command
done



以下是一个基本的while循环,测试条件是:如果int小于等于5,那么条件返回真。int从0开始,每次循环处理时,int加1。运行上述脚本,返回数字1到5,然后终止。



#!/bin/sh
int=1
while(( $int<=5 ))
do
        echo $int
        let "int++"
done



使用中使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量





无限循环




while :
do
    command
done

或者

while true
do
    command
done

或者

for (( ; ; ))

4.until 循环



until循环执行一系列命令直至条件为真时停止。



until循环与while循环在处理方式上刚好相反。



until condition do command done



5.case



Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。




echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

6.跳出循环



在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。



break命令允许跳出所有循环(终止执行后面的所有循环)。



continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。



五.shell函数


shell中函数的定义格式如下:



[ function ] funname [()] {
    action;
    [return int;]
}



说明:



  • 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。



demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"



函数返回值在调用该函数后通过 $? 来获得。





参数



在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...



funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73



注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。





参数处理

说明

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$@

与$*相同,但是使用时加引号,并在引号中返回每个参数。

$-

显示Shell使用的当前选项,与set命令功能相同。

$?

显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。



六.shell输入输出重定向



命令

说明

command > file

将输出重定向到 file。

command < file

将输入重定向到 file。

command >> file

将输出以追加的方式重定向到 file。

n > file

将文件描述符为 n 的文件重定向到 file。

n >> file

将文件描述符为 n 的文件以追加的方式重定向到 file。

n >& m

将输出文件 m 和 n 合并。

n <& m

将输入文件 m 和 n 合并。

<< tag

将开始标记 tag 和结束标记 tag 之间的内容作为输入。



需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。





1.输出重定向



command1 > file1



上面这个命令执行command1然后将输出的内容存入file1。



注意:任何file1内的已经存在的内容将被新内容替代。如果要将新内容添加在文件末尾,请使用>>操作符。





2.输入重定向



command1 < file1



需要从键盘获取输入的命令会转移到文件读取内容。



注意:输出重定向是大于号(>),输入重定向是小于号(<)。