C语言第十七章:shell脚本

Posted 歌咏^0^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言第十七章:shell脚本相关的知识,希望对你有一定的参考价值。

一、如何去理解shell

shell 是 用户 与 内核沟通的桥梁

二、shell命令

        1、linux命令指的是 就是 shell命令,大多数shell命令存放在/bin,当我们需要使用一个命令时,实际的流程:

                打开一个Termial终端----》Termial终端实际上是运行了一个bash进程(bash命令解析器)  

        2、bash命令解析器会把bash命令提示符打印到终端上

        3、所有在命令行上输入的命令,都是使用Bash解析器进行解析

        4、bash命令解析器 存在 什么地方

         所谓的shell命令 其实 就是一个可执行程序 ,用C语言编写好的可执行程序

三、shell编程

        1、什么是shell编程

                shell编程就是通过shell语法(一套规则)将shell命令组合起来,写入到一个文件中。将来要运行这个文件时,就会执行这个文件中的每一行shell语句,这个文件称之为shell脚本文件

        2、shell编程 和 C语言 编程 有什么区别

                                             C 语言                          shell编程

                  语法                    C语法                           shell语法

                文件后缀                xx.c                             xx.sh

             文件存放位置         任意目录          除了共享目录之外,一般放在家目录

                 不需要gcc 编译 ,但是需要给权限

                  chmod 777 shell脚本名

        3、为什么我们要学习shell编程

                当前IT服务器 百分之80都是 linux服务器。linux服务器 的日常维护和管理 需要 linux运维工程师。linux运维工程师工作内容:

                1)、安装操作系统 Centos ubuntu

                2)   、部署代码环境 ,比如网站后台

                3)、及时修复漏洞,防止服务器被攻击

                4)、监控服务器压力,别让服务器宕机。

                linux运维工程师管理的服务器成千上万台,这个时候运维工程师使用 shell脚本 实现linu系统自动化管理 当前的系统。linux底层开发的时候会用到。所以说,每一个合格的linux运维工程师,都应该熟练地使用shell脚本。

四、编写和运行第一个shell脚本程序

        1、编写时需要注意以下几点:

                1)shell脚本没有main函数,也没有头文件。shell脚本文件中是使用bash解析器进行解析,所以必须在shell脚本 的第一行指明 解析器的路径:

                 2)shell脚本中没有printf函数,要输出内容到终端上,必须使用shell命令echo

                -e是转移字符有效

                 3)编写第一个hello.sh程序

                         vi hello.sh

                         保存退出

                4)如何运行编写好的hello.sh程序

                        给权限 (因为默认是没有权限的)

                        chmod 777 hello.sh

                        运行

                        ./hello.sh

        注意: 最好在家目录下新建一个目录 cs21233shell --》以后写shell程序 就在这个目录下写

 五、变量

        1、shell变量不需要声明数据类型,所有的变量默认都是 字符串类型

                C ----》 int a;

                shell ----》 str

        2、shell语法中为变量赋值的时候,等号的左右两边不允许空格

                C-----》int a = 10;

                shell str=hello

        3、变量的引用,需要在变量的前面加入 美元的符号 $

                str=hello

                echo "$str"

        4、变量的种类

                1)、自定义变量 str=hello

                2)  、系统环境变量 --------env查看系统环境变量

                        PATH

                        HOME

                        PWD

                                如何修改环境变量:

                                        export PATH=$PATH:/mnt/hgfs/share

        注意:1、在脚本中设计的环境变量只在脚本 及其子脚本范围中有效,如果想要在外边环境中生效,则需要在前面加上 source 脚本文件名

         现在我想要实现的效果: 每次启动系统或者启动终端的时候,自动执行我们的脚本文件。 

        可以在启动脚本文件 .bashrc 中,加入path.sh 的执行,也就是每次执行启动脚本的时候,都会执行该语句

        在.bashrc文件的末尾,添加下面的代码

         5、位置变量(传递命令行参数和函数调用时传递参数)

             C语言:int main(int argc,char *argv[]) ./test aaa bbb argv[0] ->程序的名字./test

             shell: ./2.sh aaaa bbbb

              $0 : 表示 命令程序名 ./2.sh

              $1 : 表示 第一个参数 aaaa

              $2 : 表示 第二个参数 bbbb

               ......

              $n:表示 第n个参数

                $# 表示命令行传参的个数不包括脚本名

                $* 包含所有命令行参数 aaaa bbbb

                $? 表示前一个命令的退出状态返回值

                前一个命令执行成功:0

                执行失败:非0

         练习2: 分别使用变量 和命令行传递参数 输出 hello world字符串

 六、shell编程符号

        1、双引号 ---》作用:把某些东西 变成 “值”

                1)比如字符串中有空格 ,必须使用"",如果没有空格,不加 ""也可以

                 2)在""内可以对变量进行引用

                3)在 ""内部是可以使用shell命令,但是使用shell命令需要使用 反引号 包含 

                         输出以下:

                         输出以下:

 

         2、单引号----》在单引号里面的内容 看做是纯粹的字符串

                echo 'today is `date`'

                输出结果:today is `date`

        3、反引号 --》把双引号 中的命令标识出来,也就是将反引号中的内容当成一个shell命令进行解析  

        4、重定向 符号 < << > >>

                系统默认打开三个文件: 标准输入(0) 、标准输出(1)、标准出错(2)

                实际上这几个数值 是 默认打开的文件描述符

                        1)输出重定向

                                命令的输出结果 通常提交到标准输出设备(终端),但是也可以重新定个方向到其他位置,比如用一个文件来代替,这叫做输出重定向

 

                         2)输入重定向 < <<

                                 命令的输入通常是冲标准输入设备(键盘)中请求的,但是也可以重新定个方向到其他位置,比如 从一个文件请求,叫做输入重定向。

                         3)标准出错重定向

                                unix命令把大部分错误信息都写到这个设备中,一般情况下,标准出错设备和标准输出设备是同一个设备(终端),标准出错设备也可以重定向到文件中

                                2 表示 标准错误,不可省略

七、算术运算命令 expr

        1、expr 主要是用于 简单的整数计算,包括 加(+) 减(-) 乘(\\*) 除(/) 取余(%)

 八、获取输入

        read : 在shell中表示 从终端获取输入

         练习3: 从键盘上获取 三个整形数 ,计算他们的和 ,并且显示

         练习4: 从键盘上获取一个同学的信息,并且打印出来

 九、test测试语句

 test测试语句 理由测试三种对象:字符串 、整数、文件属性

        1、字符串测试

                =           测量两个字符串内容是否完成相同

                !=          测量两个字符串内容是否不一样

                -Z(zero) 测试字符串是否为空,为空,返回true

                -n(null)   测试字符串是否不为空 ,不为空,返回 true

        2、整数测试

                a=10

                b=20

                a -eq b equal 测试两个整数是否相等

                a -ne b not equal 测试两个整数是否不相等

                a -gt b greater 测试 a是否大于b

                a -ge b greater or equal 测试a是否大于等于b

                a -lt b little 测试a是否小于b

                a -le little or equal 测试a是否小于等于b

        3、文件测试

                -d name 测试name 是否是一个目录 (dir)

                -f name 测试name 是否为一个普通文件 (file)

                -L name 测试name 是否为符号链接文件(Link)

                -r name 测试Name文件是否存在 并且可读(read)

                -w name 测试name文件是否存在并且可写(write)

                -x name 测试文件是否存在并且可执行(excute)

                -s name 测试name文件是否存在并且长度不为0(size)

                file1 -nt file2 测试file1是否比file2更新 (newer than)

                file1 -ot file2 测试file1是否比file2 更旧(older than)  

                test命令可以使用 [ ]来简写

                test expression ====> [ expression ] //[ ] 左右两边要有空格

十、if分支语句

格式:

 

 例子:

补充:

             修改.sh脚本的头部信息:.vimrc

以上是关于C语言第十七章:shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

第七章 SHELL脚本

C语言第十八章:shell脚本

Linux 笔记 - 第十二章 Shell 脚本

六十七shell脚本介绍shell脚本结构和执行date命令用法shell脚本中的变量

Linux Unix shell 编程指南学习笔记(第四部分)

Linux学习总结(五十七) shell脚本1