目录
前言
一、概述
(一)、shell脚本基础概念
(二)、shell的类型
二、Shell变量
(一)、组成
1.变量名
2.变量值
(二)、类型
1.系统内置变量(环境变量)
2.自定义变量
3.预定义变量
4.位置变量
5.作用域
6.shell中的字符串
三、运算符
(一)、数学运算
(二)、比较运算
1.逻辑运算符
2.条件测试
3.字符串比较
4.数值比较
5.文件比较
四、shell脚本
(一)、shell脚本编写规范
(二)、shell运行规则
(三)、shell脚本运行追踪
总结
前言
shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学。
一、概述
(一)、shell脚本基础概念
脚本就是将手动一次性执行的命令进行规范且自动化
(二)、shell的类型
shell 命令解释环境
类型有
     sh
     ash
     bsh
     csh
     bash
     tcsh
     dsh
     zsh
在Linux系统中
文件名.sh .sh是linux下bash shell 的默认后缀
查看系统中支持的shell
     cat /etc/shells
查看系统默认shell
     echo $SHELL

二、Shell变量
(一)、组成
1.变量名
不会变化
声明规范
     不能是数字或数字开头
     以_或字母开头
     变量名中不能包含特殊字符

声明方法
     驼峰式                userName
         
     双驼峰                UserName
         
     shell写法
         user_name
         username
         USERNAME
2.变量值
不断变化
数字、字符
(二)、类型
1.系统内置变量(环境变量)
这种变量中主要保存的是和系统操作环境相关的数据,一般对系统起作用的环境变量的变量名是系统预先设定好的。
env可在/etc/profile文件中修改
   
  

查看环境变量
echo $PATH
显示当前环境变量的值
echo $LANG

表示系统的默认语言环境为美式英语(English, United States)并使用UTF-8编码
查看当前的区域设置
locale


查看远程连接
echo $SSH_CONNECTION

2.自定义变量
这种变量是最常见的变量,由用户自由定义变量名和变量的值。
varName=varValue
等号两边不能有空格
字符串
     shell中可以不使用引号
     当包含有空格时,需要使用引号
引号的用法
| 不会引用变量值 | 单引号 ' | 
| 会应用变量值 | 双引号 " | 
| 引用命令结果 | 反撇号 ` | 
| $(命令) | 应用场景较多 | 
3.预定义变量
是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
| $0 | 脚本本身的名称 | 
| $# | 脚本后参数的个数 | 
| $* | 脚本运行时参数的内容(整体输出) | 
| $@ | 脚本运行时参数的内容(逐个输出) | 
| $? | 脚本运行完毕后的返回值 | 
| 默认情况大 | 0 成功 | 
| 非0 失败 | 
  



 一般情况下失败为1,特殊的失败
  4.位置变量
 
这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
    脚本后参数所在的位置
     $1
     ...
     $9       
     
  
5.作用域
输出 echo $varName
默认变量只在当前shell下生效
若要在当前及其子shell下生效,需要声明为全局变量(export)

   
 
        
   
   6.shell中的字符串      
 
string
  1)获得字符串的长度         
语法: ${#StringName}

2)字符串取子串        
 语法:    ${#StringName:position:lenght}      
注意:lenght没有定义时,一直取到字符串的结尾!

3)字符串的截取          
 a.从左至右截取最后一个匹配字符串string之后的所有字符串                
 语法:    ${StringName##*string}    
b.从左至右截取第一个匹配字符串string之后的所有字符串
 语法:    ${StringName#*string}
c.从右至左截取最后一个匹配字符串string之后的所有字符串
 语法:    ${StringName%%string*}    
d.从右至左截取第一个匹配字符串string之后的所有字符串
 语法: ${StringName%string*}

4)字符串的拼接
 语法:    StringName3=${StingName1}${StringName2}

5)字符串替换:
 语法:    ${StringName/OldString/NewString}

三、运算符
(一)、数学运算
| + - * / % | * 作为乘号时需要加转义符为\* | 
| 运算方法 | |
| expr | expr $a + $b | 
| $((a+b)) | echo $((a+b)) | 
| $[a+b] | echo $[a+b] | 
| 注意 | shell不支持浮点数的显示 | 
| \r | 回车符 | 
| \d | 垂直制表符 | 
| \v | 水平制表符 | 
  

(二)、比较运算
1.数值比较
| -eq | 等于 | 
| -ne | 不等于 | 
| -lt | 小于 | 
| -le | 小于等于 | 
| -gt | 大于 | 
| -ge | 大于等于 | 
用test测试

2.文件比较
| -e | 文件或目录是否存在 | 
| -f | 是否为文件 | 
| -d | 是否为目录 | 
| -r | 判断文件是否可读 | 
| -w | 判断文件是否可写 | 
| -x | 判断文件是否可执行 | 

 
3.字符串比较
| = | 字符串一致 | 
| != | 字符串不一致 | 
| -z | 字符串为空 | 
| ! -z | 字符串不为空 | 

4.逻辑运算符
| && | 并且,有假则假,全真为真 | |
| || | 或者,有真则真,全假为假 | |
| ! | 取反 | 有真则假,有假则真 | 

 
  
5.条件测试
| && | [ $a -ne $b ] && echo OK | 条件 && 输出结果 | 
| 条件为真输出 | ||
| || | [ $a -ne $b ] || echo OK | 条件 || 输出结果 | 
| 条件为假输出 | 
四、shell脚本
(一)、shell脚本编写规范
         
 
| 第一行 | #!/bin/bash | 
| 第二行 | #脚本的说明 | 
| 第三行 | 脚本正文 | 
(二)、shell运行规则
| 没有x权限 | bash 脚本所在路径/脚本文件 | 
| source 脚本所在路径/脚本文件 | |
| .(点)脚本所在路径/脚本文件 | |
| 有x权限 | .(点)/脚本文件 | 
| 脚本绝对路径/脚本文件 | 


 不打断会一直查看
不打断会一直查看 
(三)、shell脚本运行追踪
shell脚本运行追踪bash -x 脚本所在路径/脚本文件
     
 $[$RANDOM%100]返回100内随机数
     
 seq 1 10返回1到10 的连续数字
     
 {1..10}返回1到10 的连续数字
     
 seq 1.1 10.1返回1.1 2.1 3.1.... 10.1

     
 read -p "提示语" 变量名读取键盘输入并赋值给变量名
  


总结
今天的任务量有些重,但知识点是看懂和编辑Shell脚本的基础,需要花费时间进行反复背记,加油吧!