认识shell

一、认识shell

什么是shell?shell为单词外壳的意思。那么这是谁的外壳?我们知道一个系统中实际工作的是那些硬件,cpu、内存、磁盘等。我们如何调用这些硬件为我们工作?实际上,硬件是由内核kernel控制的。我们可以通过kernel控制硬件,但我们不能直接和内核kernel交流。我们需要一个外壳,这个外壳就是shell来沟通kernel。何为shell脚本,其实不过是一堆命令写在一个文件中,这个文件具有执行权限。

二、变量

什么是变量?变量是脚本编程中数据表现的一中方法,变量是系统为了保留数据项在内存空间中分配一个位置或者一组位置的标识或名字。bash变量是不区分类型的,本质上都是字符串。

2.1 特殊的变量类型

本地变量:只对当前的shell进程有效,对其它shell进程无效,包含当前shell进程的子进程

环境变量:对当前shell进程和子进程有效,对其它shell无效

局部变量:对shell脚本中某段代码片段有效,通常用于函数本地,通常用local来定义

位置变量:$0  $1  $2…$n

常用的特殊变量:$? $@ $* $# $$

数组  :是特殊的变量,bash支持一维数组。数组由数组名+索引 组成。

如:a[1] a[2] a[3] … a[N]  a[hello]  a[Number]  a[string] …

2.2 变量的声明及赋值

1.不能使用系统内置变量

2.以字母,数字,下划线组成,不能以数字开头

3.见名知义

定义整型的变量

定义数组

可以使用declare 定义

三、数组及字符串操作

3.1 数组操作

3.1.1 数组长度

${#ARRAY[*]}

${#ARRAY[@]}

3.1.2 数组中挑选某些元素

${ARRAY[@]:offset:number}

3.1.3 数组的删除

unset ARRAY

3.2 字符串操作

3.2.1 字符串取子串

${string:offset:length}  :从第offset个向右取length个字符串

${string: -length}    :从右向左取length个字符串

${string#*word} :在string中存储字符串上,自左而右,查找第一次出现word,删除字符开始到此word处的所有内容

${string##*word} :在string中存储字符串上,自左而右,查找最后一次出现word,删除字符开始到此word处的所有内容

${string%word*}在string中存储的字符串上,自右而左,查找第一次出现的word,删除字符开始到此word处的所有内容

${string%%word*}在string中存储的字符串上,自右而左,查找最后一次出现的word,删除字符开始到此word处的所有内容

3.2.2 字符串查找替换

${string/pattern/substi} :替换第一次出现的字符串

${sting//pattern/substi} :替换所有出现过的字符串

四、流程控制

4.1 选择分支

4.1.1 条件测试

条件测试中,如果为真,则返回执行状态为0的值,否则返回执行状态为非0的值

整型测试:数值之间比较大小     字符型比较

-gt  -lt  -eq  -ge  -le    >   <  ==  !=  >=  <=  -n  -z

常用文件测试

-e    文件存在

-d    文件存在且为目录

-f    文件存在且为普通文件

-r    文件是否具有可读权限

[leon@localhost ~]$ [  -r /root ]

[leon@localhost ~]$ echo $?

1

-w    文件是否具有可写权限

-x    文件是否具有可执行权限

组合条件测试 :在多个条件间实现逻辑运算

与: [ 条件一 -a 条件二 ]

    条件一 && 条件二

或: [ 条件一 -o 条件二 ]

    条件一 || 条件二 

非:[ !条件 ]

4.1.2 if选择分支

语法: if 测试条件1;then

    选择分支1

   elif 测试条件2;then

    选择分支2

   ……

   elif 测试条件n;then

    选择分支n

   else

    分支

   fi

4.1.3 case选择分支

语法:case word  in

    pattern1)

    分支1

    ;;

    pattern2)

    分支2

    ;;

    patternN)

     分支N

    ;;

    *)

      分支

    ;;

    esac

4.2 循环

4.2.1 for循环

语法1: for i in  list ;do

       list

    done

语法2: for ((表达式一;条件表达式;表达式二));do

       list

    done

4.2.2 while循环

语法1: while 测试条件; do

        循环体

    done
语法2: while read 变量名;do

        循环体

    done < /path/to/somefile

 4.2.3 until循环

语法:until 测试条件; do

        循环体

    done

五、函数及返回值

语法1: function function_name {list}

语法2: function_name () {list}

六、循环控制

continue : 提前进入下一轮循环

break  :跳出当前循环

七、信号捕捉

信号捕捉:trap 'COMMAND;COMMAND'  SINGNAL

八、总结

shell编程是linux运维人员必须掌握的技能,shell不像其它C、C#、Java等高级编程语言那样有类和对象,面向对象等概念,但是shell可以有强大的命令支撑。毕竟我们是通过shell来沟通内核,不需要运行在虚拟机上。

原创文章,作者:成吉思汗,如若转载,请注明出处:/8026

评论列表(1条)

  • stanley
    stanley 2015-09-22 09:35

    总结的非常不错,文档功底很深

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达娱乐直属QQ  万达娱乐  万达娱乐主管  万达注册  万达招商  万达主管  万达直属QQ  测试  万达娱乐主管QQ