shell笔记2

1.Linux默认shell是bash,Unix默认shell是sh

   bash完全兼容sh

2.定义变量

    定义变量时,变量名不加美元符号($),使用变量时才在变量名前加$

    变量名和等号之间不能有空格

    变量名可以使用的字符只能是数字、字母和下划线

    首个字符必须为字母

    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如:${skill}Script

3.readonly 命令可以将变量定义为只读变量

   unset 命令可以删除变量

4.

特殊变量列表
变量含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

5.shell 变量替换

    echo -e 表示对转义字符进行替换:

  1. a=10
  2. echo -e "Value of a is $a \n"

    输出:

   Value of a is 10

   命令替换:

      `command`(注意是反引号,不是单引号,这个键位于 Esc 键下方。)

6.算数运算使用expr

   expr 3 + 2  (表达式和运算符之间要有空格)

   expr 3 - 2

   expr 3 \* 2 (乘号前面要加反斜杠\)

   expr 3 / 2

   输出为:4

7.条件表达式

关系运算符列表
运算符说明举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 true。
-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。

   条件表达式语法:

   

1 if [ $a -lt 100 -a $b -gt 15 ]
2 then
3    echo "$a -lt 100 -a $b -gt 15 : returns true"
4 else
5    echo "$a -lt 100 -a $b -gt 15 : returns false"
6 fi

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

 

布尔运算符列表
运算符说明举例
! 非运算,表达式为 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。

 

字符串运算符列表
运算符说明举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。 [ -z $a ] 返回 true。
str 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

 

文件测试运算符列表
操作符说明举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -b $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。

8.shell字符串

  单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

  双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

  获取字符串长度:   

  1. string="abcd"
  2. echo ${#string} #输出 4

  提取子字符串:

  1. string="alibaba is a great company"
  2. echo ${string:1:4} #输出liba

  查找字符串:

  1. string="alibaba is a great company"
  2. echo `expr index "$string" is`

9.数组

   在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。

   定义数组的一般形式为:array_name=(value1 ... valuen)

   读取数组元素值的一般格式是:${array_name[index]}

   获取数组的长度:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

10.条件判断:case ... esac

casein
模式1)
    command1
    command2
    command3
    ;;
模式2)
    command1
    command2
    command3
    ;;
*)
    command1
    command2
    command3
    ;;
esac

11.for循环语句

for 变量 in 列表
do
    command1
    command2
    ...
    commandN
done

列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔

12.while循环

while command
do
   Statement(s) to be executed if command is true
done

13.until循环

until command
do
   Statement(s) to be not executed until command is true
done

command 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

14.跳出循环:break和continue

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

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

15.shell函数

   ①Shell 函数必须先定义后使用。   

   ②调用函数只需要给出函数名,不需要加括号。

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

   ④像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项

   ⑤如果你希望直接从终端调用函数,可以将函数定义在主目录下的 .profile 文件,这样每次登录后,在命令提示符后面输入函数名字就可以立即调用。

16.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 之间的内容作为输入。

 




posted @ 2017-03-07 11:20  whiteprism  阅读(136)  评论(0编辑  收藏  举报