什么是shell:
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
一、编程基础
1、提供了编程环境:
程序:算法+数据结构
数据:程序的核心
数据结构:数据在计算机中的类型和组织方式
算法:处理数据的方式
程序编程风格:
过程式:以指令为中心,数据服务于指令
对象式:以数据为中心,指令服务于数据
shell程序:提供了编程能力,解释执行
2、程序的执行方式:
计算机:运行二进制指令
编程语言: 人和计算机之间交互语言
编程语言:
低级语言:
机器、汇编
高级语言:
编译:高级语言-->编译器-->目标代码
c、c++
解释:高级语言-->解释器-->机器代码
shell,perl,python
3、过程式编程:
顺序执行:
循环执行:
选择执行:
shell编程:过程式、解释执行
编程语言的基本结构:
各种系统命令的组合
数据存储:变量、数组
表达式
语句
二、shell脚本
1、shell脚本:
包含一些命令或声明,并符合一定格式的文本文件
2、格式要求:首行遵守shebang机制!
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/perl
3、shell脚本常用的途径:
自动化常用命令
执行系统管理和故障排除
创建简单的应用程序
处理文本、文件
4、创建shell脚本
使用文本编辑器来创建文本文件,如:nano、vi、vim等
首行必须要求声明shell的序列: #!
!/bin/bash 上面说到的shebang机制
最好给脚本添加注释以区分是个什么功能的脚本
注释符号是以#开头
脚本代码开头约定
1、第一行一般为调用使用的语言
2、程序名,避免更改文件名为无法找到正确的文件
3、版本号
4、更改后的时间
5、作者相关信息
6、该程序的作用,及注意事项
7、最后是各版本的更新简要说明
#!/bin/bash
#********************************************************************
#Author: It_luo
#QQ: 123456
#Date: 2018-08-01-20:59:52
#FileName: backup.sh
#URL: http://blog.dklwj.com
#Description: The test script
#Copyright (C): 2018 All rights reserved
#********************************************************************
脚本的基本结构
#!SHEBANG 调用使用的语言
CONFIGURATION_VARIABLES 定义变量值
FUNCTION_DEFINITIONS 函数定义
MAIN_CODE 主体
运行脚本
1、刚创建的文本文件是没有执行权限的,给予执行权限,执行的话指定脚本的绝对或相对路径
2、直接运行解释器,将脚本作为解释器程序的参数运行
[root@centos6 data]# chmod +x test.sh #给脚本添加执行权限
[root@centos6 data]# /data/test.sh # 绝对路径执行
System version CentOS release 6.10 (Final)
[root@centos6 data]# ./test.sh #相对路径执行
System version CentOS release 6.10 (Final)
[root@centos6 data]# bash test.sh #用shell里的bash解释器,把脚本当成参数的方式运行
System version CentOS release 6.10 (Final)
三、shell变量
变量:命令的内存空间
数据存储方式: ASCII
字符: 110: 24
数值: 110 --> 8
×××
浮点数
变量类型
作用:
1、数据存储格式
2、参与的运算
3、表示的数据范围
类型:
字符
数值:×××、浮点型
编程程序语言:
强类型:
弱类型:bash
把所有要存储的数据统统当作字符进行
不支持浮点数
变量命名规范:
1、不能使程序中的保留字:例如if, for、where等
2、只能使用数字、字母及下划线,且不能以数字开头
3、见名知义
4、统一命名规则:驼峰命名法
驼峰法又分为两类
大驼峰
如:StudentName
小驼峰
如:studentName
变量种类:
局部变量
只对当前shell进程有效,对父shell或子shell及其他shell之外的shell进程均无效。
环境变量
当前shell及其子shell进程均有效,但对父shell无效
本地变量
生效范围为当前shell进程中某代码片断,通常指函数
位置变量
$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
特殊变量
$?, $0, $*, $@, $#,$$
局部变量
变量赋值: name='value'
可以引用的value:
1、可以是接字串;
[root@centos6 data]# name="test"
2、变量引用:
[root@centos6 data]# name=test
[root@centos6 data]# echo "My name is ${name}"
My name is test
[root@centos6 data]#
3、命令引用:
[root@centos6 data]# name=`hostname`
[root@centos6 data]# echo "name is ${name}"
name is centos6
[root@centos6 data]#
4、变量引用:${name} $name
" ":弱引用,其中的变量引用会被替换为变量值
[root@centos6 data]# name=`hostname`
[root@centos6 data]# echo "name is ${name}"
name is centos6
' ': 强引用,其中的变量引用不会被替换为变量值,而是被当成普通字符串
[root@centos6 data]# name=cobbler
[root@centos6 data]# echo 'My name is $name'
My name is $name