shell脚本编程基础

shell脚本编程基础以及一些基本的逻辑运算知识和shell的配置用户环境。

编程基础

一个程序的基本格式是由“指令+数据”组成,有些程序编程侧重于指令,数据服务于指令,我们称之为过程式编程(JAVA、C语言等)。而我们所学习的shell编程是以数据为中心,以指令服务于数据的对象式。

shell脚本基础

一个符合特定格式并包含包含命令和说明的文本文件。

首行格式:shebang机制

每个shell脚本的第一行必须遵循shebang机制,以bash脚本为例 ,首行开头必须是“#!/bin/bash”,通过这个机制我们可以初步了解是何种类型的脚本。

在脚本中以“#”开头的行都表示注释,便于说明脚本的每一步操作。这些行在运行脚本是不会显示。

我们可以通过vim编辑器创建脚本,脚本格式

其中第一行是shebang机制,第二行是对脚本的简单说明,第三行是命令来显示“it is a simple script”。保存后,一个基本的脚本就完成了。这时的脚本还不可用,还需给予执行权限后方可执行。执行效果如下:加权限

这就是脚本的最基本形式。

在编写完脚本后,我们可以通过“bash -n”来检测是否存在语法错误。

脚本的用途

自动化常用命令
 执行系统管理和故障排除
创建简单的应用程序
处理文本或文件

编程的基础知识

变量的基本概念

变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储脚本运行时可更改的程序信息。变量通常用在脚本中的赋值运算,文本表示中。

在bash中使用的变量都是弱类型变量(不需事先指定类型,默认字符型,在进行计算时自动进行转换,)且不支持浮点数。

变量的命名规则:

不可使用程序中的保留字,避免混淆

不可以数字开头

通俗易懂,见名知意

驼峰命名法

几种不同的变量

(1)局部变量:仅在当前shell范围下生效。对子shell无效,通过“set”查看所有变量,通过“unset name”删除指定的变量。

(2)环境变量:在当前shell及子shell范围下生效。通过“export”和“declear -x”来定义环境变量,可通过“env”,“printenv”,“export”和“declare -x”来查看所有环境变量。

(3)本地变量:又称为常量,不可修改或删除。通过“readonly”和“declear -r”来定义本地变量,可通过“readonly -p”来查看所有本地变量。

(4)位置变量:在脚本中需要多个参数时,每一个变量所对应的参数。

$1表示第一个参数,$2表示第二个参数……;$#表示所有参数的个数;$0表示脚本的名称($0表示完整路径,‘basename $0表示基名’);$@和$*都表示所有参数,不同的是$@是将所有参数都作为独立的参数而$*将所有参数看成一个整体。

shift[n]可使第n+1个参数替换第一个参数,第n+2个参数替换为第二个参数,以此类推。“set –”可清除所有位置变量。

算术运算

+ (加)  -(减)  *(乘)   /(除)  **(乘方) %(取余)

算术运算

let var=算数表达式(可不加’$’)

var=$[算术表达式](加$)

var=$((算术表达式))(加$)

增强型赋值

i+=3   等同于   i=i+3

i++     等同于  i=i+1(先取值再+1)

++i   等同于     i+1=i(先+1再取值)

逻辑运算

true=1,false=0

或(|)                                           与(&)                           非(!)

0|0=0                                         0&0=0                                    !0=1

1|0=1                                           1&0=0                                    !1=0

0|1=1                                           0&1=0

1|1=1                                           1&1=1

短路运算

短路或(||)

cmd1||cmd2  当cmd1为1时将不执行cmd2,当cmd1为0时执行cmd2。

短路与(&&)

cmd1&&cmd2 当cmd1为0时将不执行cmd2,当cmd1为1时执行cmd2。

异或(^)

相同为0,不同为1。

条件测试

在脚本中根据默写特定的需要来测试命令是否执行时,可使用条件测试来确定是否执行。

测试命令:

[    ]

[[   ]]

中括号的两边需空格

可以进行数值测试

数值比较

也可以进行字符串测试字符串测试

其中“[[    =~    ]]”支持扩展正则表达式

扩展

还可以测试文件类型以及文件权限等。

使用read命令来接受输入

从标准输入中读取数值,将每个数值分配给一个变量,所有剩余的单词都被分配到最后一个变量。重定向输入时,默认read只会读取重定向的第一行。

bash命令行的优先级定义

把命令行分成单个命令词
展开别名
 展开大括号的声明({}
展开波浪符声明(~
命令替换$()
再次把命令行分成命令词
展开文件通配(*?[abc]等等)
准备I/0重导向(<>
运行命令

bash的配置文件

用户登录时读取的配置文件,针对所有用户的配置文件存放在“/etc/profile、/etc/profile.d/*、/etc/bashrc中”,个人配置文件存放在“~/.bash_profile和~/.bashrc中”

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88928

(0)
yoyiccccyoyicccc
上一篇 2017-11-26 19:42
下一篇 2017-11-26 20:44

相关推荐

  • God进程监控框架

    监控重启进程的方案有很多种: 最简单的方法,写个脚本fork进程运行,然后waitpid,如果获pid后就再次启动 最土的方法,配置cron任务,固定时间运行脚本检查进程是否存在,不存在则启动 百度使用qmail里的supervised程序,通过supervised监管进程。 优点:supervised可以启动daemon程序,对于非daemon需要采用no…

    Linux干货 2015-02-13
  • 马哥教育网络班22期+第四周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@localhost ~]# cp -rf /etc/skel/ /home/tuser1 [root@localhost ~]# chmod&…

    Linux干货 2016-09-19
  • grep与正则表达式

    grep与正则表达式 grep与正则表达式 grep 正则表达式 grep 使用语法:grep [-abcEFGhHilLnqrsvVwxy][-C<显示列数>][-e<范本样式>][-f<范本文件>][范本样式][文件或目录…]  功能说明:查找指定文件或标准输入里符合条件的字符串 常用选项 -a…

    Linux干货 2016-11-05
  • Windows PHP 中 VC6 X86 和 VC9 X86 的区别及 Non Thread Safe 的意思

    PHP5.3以后 For Windows 提供了四个版本VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe 在 官网 左边栏有提示: Which version do I choose? If you are usi…

    Linux干货 2015-06-16
  • N25第八周博客作业

    1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;     在线的主机使用绿色显示;     不在线的主使用红色显示; #!/bin/bash trap ‘mytrap’ INT mytra…

    Linux干货 2017-02-26
  • linux 的套接字

    套接字是一种通信机制,凭借这种机制,客户/服务器系统的开发工作既可以在本地单机上进行,也可以跨网络进行。 套接字的特性有三个属性确定,它们是:域(domain),类型(type),和协议(protocol)。套接字还用地址作为它的名字。地址的格式随域(又被称为协议族,protocol family)的不同而不同。每个协议族又可以使用一个或多个地址族定义地址格…

    Linux干货 2016-08-18