Shell学习笔记

基本知识

  • 变量赋值时,’=’左右两边都不能有空格
  • BASH中的语句结尾不需要分号(”;”)
  • 除了在变量赋值和在FOR循环语句头中,BASH中的变量使用必须在变量前加$符号
  • 由于BASH程序是在一个新的进程中运行的,所以该程序中的变量定义和赋值不会改变其他进程或原始Shell中同名变量的值,也不会影响他们的运行
  • BASH中的变量既然不需要定义,也就没有类型一说,一个变量即可以被定义为一个字符串,也可以被再定义为整数。如果对该变量进行整数运算,他就被解释为整数;如果对他进行字符串操作,他就被看作为一个字符串
  • 单引号引起的内容会被全部当做普通字符,即全部原样

    1
    2
    3
    NUM=100
    #Print NUM
    echo 'NUM'
  • ``倒引号内的字符串会被当作shell命令行解析执行

    1
    2
    3
    list=`ls`
    #Print 文件列表
    echo $list
  • expr: 对表达式求值,表达式中,数字和运算符之间要有空格

    1
    2
    3
    SUM=`expr 1 + 3`
    #Print 4
    echo $SUM
  • 表达式求值,使用*需要加转义符

    1
    2
    3
    SUM=`expr 1 \* 3`
    #Print 3
    echo $SUM
  • []:对被括起来的表达式求值

    1
    2
    3
    4
    5
    6
    7
    i=1
    sum=0
    while [ $i -le 100 ]; do
    echo $i
    sum=$[$sum+$i]
    i=$[$i+1]
    done

比较操作

FunctionOperatorCommand
相同-eq=
不同-ne!=
大于-gt>
小于-lt<
大于或等于-ge>=
小于或等于-le<=
-znull
不为空-n!null

推荐在比较时尽量不要使用 -n ,而用 ! -z 来代替。(其中符号 “!” 表示求反操作)

文件判断

OperatorFunction
-e filefile 已经存在
-f filefile 是普通文件
-s filefile 大小不为零
-d filefile 是一个目录
-r filefile 对当前用户可以读取
-w filefile 对当前用户可以写入
-x filefile 对当前用户可以执行
-g filefile 的 GID 标志被设置
-u filefile 的 UID 标志被设置
-O filefile 是属于当前用户的
-G filefile 的组 ID 和当前用户相同
file1 -nt file2file1 比 file2 更新
file1 -ot file2file1 比 file2 更老

局部变量

在 BASH 程序中如果一个变量被使用了,那么直到该程序的结尾,该变量都一直有效。为了使得某个变量存在于一个局部程序块中,就引入了局部变量的概念。BASH中,在变量首次被赋初值时加上local关键字就可以声明一个局部变量。

条件判断数据

if 语句用于判断和分支,其语法规则和 C 语言的 if 非常相似。

其几种基本结构为:

1
2
3
4
if [ expression ]  
then
statments
fi

1
2
3
4
5
6
7
8
9
if [ expression ] 
then
statments
elif [ expression ]
then
statments
else
statments
fi

for循环语句

1
2
3
4
for $var in   Arr
do 
statments 
done

BASH 中有一些保留变量

  • $PWD 表示当前工作路径

函数

1
2
3
4
5
6
# 函数的参数数组索引是从1开始的
function sum(){
echo "参数:$1,$2"
echo $[$[$1+$2]*$[$2-$1+1]/2];
}
sum 1 100

字符串操作

  • 字符串截取 -c 起始位置到结束位置

    1
    2
    STR="12345678"
    echo $STR | cut -c 2-6
  • 参数

    1
    2
    3
    4
    5
    6
    # $# 传递到脚本的参数个数
    echo $#
    # $0 脚本名字
    echo $0
    # $1 位置参数
    echo $1
有用就打赏一下作者吧!