一、Shell
- Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁
- Shell 既是一种命令语言,又是一种程序设计语言。
- Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
二、Shell环境
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
三、shell创建
(1)创建文件设置权限
①创建 touch kb08.sh vi kb08.sh进入修改
1)#!/bin/bash
2)echo’hello world’
3):x
②修改权限chmod u+x xxx.sh
启动 ./xxx.sh
四、shell变量
-
系统变量:①系统变量 echo $PATH printf ‘%s\n%s\n%s\n’ $PATH $PWD $USER
$UID $HOME $HOSTNAME
set:显示所有系统变量 -
自定义变量:
1)数据类型:
a.弱类型(通常为字符串、数值)(一个变量可以赋不同数据类型的值)
b.数组([val1,…,valn])
2)声明变量: VAR=VALUE
a.变量命名组成规则同java常量
b.=两侧不能有空
c.赋值
a)A=123
b)A=henry ‘henry Chen’ “1 and 2”
c)A=ls-la
<=>A= ( l s − l a ) 3 ) 取 消 变 量 : u n s e t V A R 4 ) 变 量 的 作 用 域 a . 环 境 变 量 : 跨 S H E L L 访 问 b . 全 局 变 量 : 当 前 S H E L L 中 访 问 a ) 每 个 S H E L L 会 话 都 是 独 立 进 程 拥 有 独 立 P I D , 不 同 S H E L L O 会 话 之 前 不 会 相 互 交 叉 英 雄 b ) 函 数 中 的 变 量 默 认 也 是 全 局 变 量 c . 局 部 变 量 : 当 前 函 数 中 访 问 a ) 函 数 中 声 明 局 部 变 量 : l o c a l A = 5 d . 预 定 义 变 量 a ) (ls -la) 3)取消变量:unset VAR 4)变量的作用域 a.环境变量:跨SHELL访问 b.全局变量:当前SHELL中访问 a)每个SHELL会话都是独立进程拥有独立PID,不同SHELLO会话之前不会相互交叉英雄 b)函数中的变量默认也是全局变量 c.局部变量:当前函数中访问 a)函数中声明局部变量:local A=5 d.预定义变量 a) (ls−la)3)取消变量:unsetVAR4)变量的作用域a.环境变量:跨SHELL访问b.全局变量:当前SHELL中访问a)每个SHELL会话都是独立进程拥有独立PID,不同SHELLO会话之前不会相互交叉英雄b)函数中的变量默认也是全局变量c.局部变量:当前函数中访问a)函数中声明局部变量:localA=5d.预定义变量a)? 最后一次执行命令的返回状态 0表示正常, 其他表示异常
b)$$ 当前进程的进程编号PID
c)$! 后台运行的最后一个进程编号PID
5)输入参数 ./xxx.sh 1 2 3 调用shell脚本传参
a. 0 命 令 本 身 b . 0 命令本身 b. 0命令本身b.n int(n>0)表示第几参数
c. ∗ 所 有 参 数 ( 整 体 ) d . * 所有参数(整体) d. ∗所有参数(整体)d.@ 所有参数(个体)
e.KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ 参数数量 (3)注释 ①单…((EXP)) S= ( ( 2 + 3 ) ) b . ((2+3)) b. ((2+3))b.[EXP] S=$[2*3]
c.expr EXP 分布计算
注意:*表示乘法,其他相同,运算符前后必须加空格
S=expr 2 \* 3
d.let 简单表达式
②关系运算符和条件表达式condition前后有空格
1)[ condition ] -eq -ne -gt -lt -ge -le(等于、不等于、大于、小于、大于等于、小于等于)
2)test condition 同上
3)[[ contition ]] 同上
③逻辑运算符
1)! 非
2)-o 或
3)-a 且
(6)逻辑控制
①分支结构
if [ condition ]
then
语句块
ifif [ condition ]
then
语句块
elif[ condition2 ]
then
语句块
else
语句块
ficase $VAR in
V1)
语句块
;;
V2)
语句块
;;
*)
语句块
;;
ease
②循环
for VAR in val1…valn
do
语句块
done
for((初始化;条件;变化))
do
语句块
done
while [ condition ]
do
语句块
done