shell 是过程式、解释执行的语言
shell 编程语言的根本构造:
- 各种系统命令的组合
- 数据存储:变量、数组
- 表达式:a+b
- 管制语句:if
首行申明 – 解释器
#!/bin/bash
#!/usr/bin/python
bash–is an sh-compatible command language interpreter that executes commands;
bash -n file # 查看语法
bash -x file # 查看并执行
变量
变量类型:
内置变量:PS1,PATH,UID,HOSTNAME,$$,BASHPID,HISTSIZE 等
用户自定义变量
变量数据类型:
字符
数值:整型、浮点型
变量赋值
name='host'
name="$NAME" -- 弱援用,替换为变量值;name='$NAME'-- 强援用,原字符串输入;
name=`COMMAND` 或者 name=$(COMMAND)
变量追加值
NAME+=:wang
显示已定义的所有变量
set
unset <name> 勾销变量
lscpu|grep ‘Model name’|tr -s ‘ ‘|cut -d : -f2
free -h |grep ‘Mem’|tr -s ‘ ‘ :|cut -d : -f2
lsblk|grep ‘^sd’|tr -s ‘ ‘ :|cut -d : -f5
环境变量:
个别只在零碎配置文件中应用,在脚本中较少应用;子过程能够继承父过程的环境变量;
申明并赋值环境变量:
export NAME=VALUE
declare -x NAME=VALUE
显示所有环境变量
env
printenv
export
declare -x
删除环境变量
unset NAME
只读变量
readonly NAME
declare -r NAME
地位变量
在 bash shell 中内置的变量,调用通过命令行传递给脚本的参数
$1,$2,….,${n} # 第几个变量
$0 #命令自身,包含门路
$* #所有参数,全副参数合为一个字符串
$# #所有参数,每个参数为一个独立的字符
退出状态码变量 –$?
格式化输入 printf
format and print data
替换符:
%-10s — 字符串,10 个,左对齐
%f — 浮点
%d,%i — 十进制整数
%o — 八进制值
%u — 不带符号的
%x — 十六进制(a-f)
%X — 十六进制(A-F)
%% — % 自身
本义符:
\b — 后退
\n — 换行
\r — 回车
\t — 程度制表符
\v — 垂直制表符
\or 其余字符 — \ 自身或其余字符
算数运算
let var=1+1
var=$[1+1]
let i+=1
逻辑运算
$[x^y]
$[x&y]
$[x|y]
$[!x]
()和 {} 的区别
批量执行命令 (CMD1;CMD2;..)/{CMD1;CMD2;..}
() 会开启子 shell
{}不会开启子 shell