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脚本介绍shell脚本结构和执行date命令用法shell脚本中的变量