什么是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