shell编程

詹姆斯大胡子

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

流程控制
条件选择

if COMMANDS; then COMMANDS; [elif COMMANDS; then COMMANDS;]...[else COMMANDS;]fi

条件判断case语句

case WORD in [PATTERN1 [| PATTERN2]...) COMMANDS ;;]... esac

循环
for循环

for NAME [in WORDS ...] ; do COMMANDS ; done
for ((exp1;exp2;exp3)) ;do COMMANDS ; done

exp1--变量初始化表达式
exp2--条件判断表达式
exp3--变量修正表达式

while循环

while COMMANDS [| CONDITION];do COMMANDS; done

循环控制语句
continue [N]--提前结束第N层的本轮循环
break [N]--提前结束第N层整个循环

while read特殊用法

while read line;do COMMANDS;done < /PATH/FROM/FILE

函数
函数定义

function fun_name(){
    函数体
}

函数返回值
退出状态码
自定义

return 从函数中返回,用最后状态命令决定返回值
return 0 无错误返回
return 1~255 有错误返回

环境函数

export -f fun_name
declare -xf fun_name

查看环境函数

export -f
declare -xf

函数参数
传递参数给函数:testfun arg1 arg2 ...
函数体重饮用: $1,$2等位置变量,$@,$*,$#等特殊变量

阅读 113

知识到技能,需要千锤百炼

1 声望
0 粉丝
0 条评论
你知道吗?

知识到技能,需要千锤百炼

1 声望
0 粉丝
宣传栏