目录
前言
一、概述
(一)、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脚本的基础,需要花费时间进行反复背记,加油吧!