`

Shell基础知识

 
阅读更多

1shell脚本实例

注意:

脚本第一行一般写为:#!/bin/bash

 

#!/bin/bash

echo "Hello World !"

 

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell

echo 命令用于向窗口输出文本

2、运行shell脚本的方法

1)、作为可执行程序

cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限

./test.sh  #执行脚本

2)、作为解释器参数

/bin/sh test.sh

/bin/php test.php

3、shell传输参数

#!/bin/bash

# author:Kelsey Han

echo "Shell 传递参数实例!";

echo "执行的文件名:$0";

echo "第一个参数为:$1";

echo "第二个参数为:$2";

执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,其中 $0 为执行的文件名,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

 

运行脚本:./test.sh 1 2

 

$# 传递到脚本的参数个数

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

 

#!/bin/bash

# author:Kelsey Han

echo "Shell 传递参数实例!";

echo "第一个参数为:$1";

echo "参数个数为:$#";

echo "传递的参数作为一个字符串显示:$*";

运行脚本:

$ chmod +x test.sh

$ ./test.sh 1 2 3

4、shell 数组

Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小

my_array=(A B "C" D)

array_name[0]=value0

array_name[1]=value1

array_name[2]=value2

读取数组

${array_name[index]}  ${my_array[0]}

 

获取数组中的所有元素使用@ * 可以获取数组中的所有元素:

${my_array[*]} ${my_array[@]}

 

获取数组长度的方法与获取字符串长度的方法相同:

${#my_array[*]}${#my_array[@]}

5、shell 运算符

expr 是一款表达式计算工具,使用它能完成表达式的求值操作,

注意使用的是反引号 ` 而不是单引号 '

#!/bin/bash

# author:Kelsey Han

a=10

b=20

val=`expr $a + $b`

echo "a + b : $val"

val=`expr $a \* $b`

echo "a * b : $val"

 

注意:

1、表达式和运算符之间要有空格;

2、完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边

3、条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

4、乘号(*)前边必须加反斜杠(\)才能实现乘法运算

关系运算符

eq 检测两个数是否相等,相等返回 true[ $a -eq $b ] 返回 false

-ne 检测两个数是否不相等,不相等返回 true[ $a -ne $b ] 返回 true

-gt 检测左边的数是否大于右边的,如果是,则返回 true[ $a -gt $b ] 返回 false

-lt 检测左边的数是否小于右边的,如果是,则返回 true[ $a -lt $b ] 返回 true

-ge 检测左边的数是否大于等于右边的,如果是,则返回 true[ $a -ge $b ] 返回 false

-le 检测左边的数是否小于等于右边的,如果是,则返回 true[ $a -le $b ] 返回 true

布尔运算符

! 非运算,表达式为 true 则返回 false,否则返回 true[ ! false ] 返回 true

-o 或运算,有一个表达式为 true 则返回 true[ $a -lt 20 -o $b -gt 100 ] 返回 true

-a 与运算,两个表达式都为 true 才返回 true[ $a -lt 20 -a $b -gt 100 ] 返回 false

逻辑运算符

&&  逻辑的 AND  [[ $a -lt 100 && $b -gt 100 ]] 返回 false

||      逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符

= 检测两个字符串是否相等,相等返回 true[ $a = $b ] 返回 false

!= 检测两个字符串是否相等,不相等返回 true[ $a != $b ] 返回 true

-z 检测字符串长度是否为0,为0返回 true[ -z $a ] 返回 false

-n 检测字符串长度是否为0,不为0返回 true[ -n "$a" ] 返回 true

$  检测字符串是否为空,不为空返回 true[ $a ] 返回 true

文件测试运算符

-b file 检测文件是否是块设备文件,如果是,则返回 true[ -b $file ] 返回 false

-c file 检测文件是否是字符设备文件,如果是,则返回 true[ -c $file ] 返回 false

-d file 检测文件是否是目录,如果是,则返回 true[ -d $file ] 返回 false

-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true[ -f $file ] 返回 true

-g file 检测文件是否设置了 SGID 位,如果是,则返回 true[ -g $file ] 返回 false

-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true[ -k $file ] 返回 false

-p file 检测文件是否是有名管道,如果是,则返回 true[ -p $file ] 返回 false

-u file 检测文件是否设置了 SUID 位,如果是,则返回 true[ -u $file ] 返回 false

-r file 检测文件是否可读,如果是,则返回 true[ -r $file ] 返回 true

-w file 检测文件是否可写,如果是,则返回 true[ -w $file ] 返回 true

-x file 检测文件是否可执行,如果是,则返回 true[ -x $file ] 返回 true

-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true[ -s $file ] 返回 true

-e file 检测文件(包括目录)是否存在,如果是,则返回 true[ -e $file ] 返回 true

6、shell echo命令

都是用于字符串的输出

显示转义字符: echo "\"It is a test\""

显示变量: echo "$name It is a test"

显示换行:echo -e "OK! \n" # -e 开启转义

显示不换行:echo -e "OK! \c" # -e 开启转义 \c 不换行

显示结果定向至文件:echo "It is a test" > myfile

显示命令执行结果: echo `date`

7、shell printf 命令

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

 

printf 命令的语法:

printf  format-string  [arguments...]

 

参数说明:

format-string: 为格式控制字符串

arguments: 为参数列表。

 

实例如下:

$ echo "Hello, Shell"

Hello, Shell

$ printf "Hello, Shell\n"

Hello, Shell

$

8、shell test 命令

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

num1=100

num2=100

If  test  $[num1] -eq $[num2]

then

    echo '两个数相等!'

else

    echo '两个数不相等!'

fi

9、shell 流程控制语句

 

如果else分支没有语句执行,就不要写这个else

 

if 语句语法格式:

if condition

then

    command1

    command2

    ...

    commandN

fi

 

if else 语法格式:

if condition

then

    command1

    command2

    ...

    commandN

else

    command

fi

 

if else-if else 语法格式:

if condition1

then

    command1

elif condition2

then

    command2

else

    commandN

Fi

 

for循环一般格式为:

for var in item1 item2 ... itemN

do

    command1

    command2

    ...

    commandN

done

 

while 语句

 

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

while condition

do

    command

done

 

until 循环

 

until 循环执行一系列命令直至条件为 true 时停止。 until 循环与 while 循环在处理方式上刚好相反。一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

 

until 语法格式:

until condition

do

    command

done

 

case

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

case in

模式1)

    command1

    command2

    ...

    commandN

    ;;

模式2

    command1

    command2

    ...

    commandN

    ;;

esac

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics