脚本编程基本功
脚本编程基本功
一、脚本基础1、格式要求:首行shebang机制;#!/bin/bash 2、#注释(日期、联系方式、作者、目的、文件名) 3、检测脚本中的语法错误 bash -n /path/to/some_script 4、调试执行 bash -x /path/to/some_script 二、变量1、Shell中变量命名法则:不能使程序中的保留字:例如if,f等;只能使用数字、字母及下划线,且不能以数字开头;见名知义 ;统一命名规则:驼峰命名法,大驼峰和小驼峰。 2、Shell中命名建议规则:变量名大写;局部变量小写;函数名小写;用英文名字,并体现出实际作用。 3、变量种类:局部变量、环境变量、本地变量、位置变量和特殊变量。 ? ① 局部变量:只能在当前进程生效,set列出所有已定义变量。删除变量 ?? `` $() 命令引用; ${} $ ‘’ “” 变量引用 ?? X=20;y=$x;x=30;echo $y;结果20 ?? Pstree -p查看当前进程编号;$BATHPID当前进程;$PPID上一级进程 ? ② 环境变量:export;declare -x ;列出所有环境变量:env;删除变 ?? 子进程改变量传不到父进程,父进程可以传给子进程 $_ ,$SHLVL ? ③ 只读变量:readonly;declare -r;列出所有只读变量readonly -p;只能声明,不能修改和删除。 ? ④ 位置变量:在脚本代码中调用通过命令行传递给脚本的参数。Set -- 清空所有位置变量。 ?? [email?protected] $* 只在被双引号包起来的时候才会有差异。 ?? $1,$2,... 对应第1、第2等参数, ${10}超过十加花括号。 ?? $0 命令本身 ?? $* 传递给脚本的所有参数,全部参数合为一个字符串 ?? [email?protected] 传递给脚本的所有参数,每个参数为独立字符串 ?? $# 传递给脚本的参数的个数 ? ⑤ 本地变量函数用 ? ⑥ 特殊变量:特殊变量:$?,$0,$*,[email?protected],$#,$$ 4、()开启子进程,临时改变,执行完退出;{}不开子进程;(umask 066;touch f1) 5、exit [n]:自定义退出状态码;脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字;如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码。 三、 算数运算1、+,-,*,/,%取模(取余),**(乘方),乘法符号有些场景中需要转义 。 2、b.X=10;y=20;①z=x+y;结果为x+y;②Z=$x+$y;结果10+20;③let z=x+y;结果为30,不用加$,可以加$;④z=[10020],结果2000;⑤z=[x20],结果200;⑥z=((x*20)),结果200; 3、expr 3 * 5,注意空格,乘号转译;echo2+3|bc 4、declare -i n;n=2+3。不支持小数。 5、id=10;let id++ 结果11 ;id++ = id+1 id++先取id再加,++id先加再取id 四、逻辑运算1、与:1 只有全为1,结果为1,只要有一个是0,结果就是0 2、或:只要有一个1,结果为1,全为0,结果才为0 3、短路与:cmd1 && cmd2 :如果cmd1 结果为失败,不执行cmd2,如果cmd1 成功,执行cmd2 4、短路或:cmd1 || cmd2: 如果cmd1 成功,不执行cmd2,如果cmd1失败,执行cmd2 5、cmd1 && cmd2 || cmd3 ##五、条件测试 1、测试命令:test EXPRESSION ;[ EXPRESSION ];[[ EXPRESSION ]];注意:EXPRESSION前后必须有空白字符。注意:变量在中括号里加双引号。 2、数值测试: -gt 是否大于 ;-ge 是否大于等于; -eq 是否等于; -ne 是否不等于; -lt 是否小于;-le 是否小于等于。 3、字符串测试:= 是否等于 ;> ascii码是否大于ascii码 ;< 是否小于;!= 是否不等于 ;=~ 左侧字符串是否能够被右侧的PATTERN所匹配。 ? 注意: 此表达式一般用于[[ ]]中;扩展的正则表达式 ;-z "STRING“ 字符串是否为空,空为真,不空为假;-n "STRING“ 字符串是否不空,不空为真,空为假;用于字符串比较时的用到的操作数都应该使用引号。 4、存在性测试 :-a FILE:同 -e ;-e FILE:文件存在性测试,存在为真,否则为假。 5、存在性及类别测试:-b FILE:是否存在且为块设备文件。-c -d -f -h -p -S。 6、权限测试:-r FILE:是否存在且可读。-w -x -u -g -k 7、文件大小测试:-s FILE: 是否存在且非空。 8、文件是否打开:-t fd: fd 文件描述符是否在某终端已经打;-N FILE:文件自从上一次被读取之后是否;-O FILE:当前有效用户是否为文件属主; -G FILE:当前有效用户是否为文件属组。 9、组合测试:EXPRESSION1 -a EXPRESSION2 并且 EXPRESSION1 -o EXPRESSION2 或者 ;! EXPRESSION 必须使用测试命令进行,[[ ]]不支持。 六、 Read1、read来把输入值分配给一个或多个shell变量 2、-p 指定要显示的提示; 3、s 静默输入,一般用于密码; 4、-n N 指定输入的字符长度N ; 5、-d ‘字符’ 输入结束符;-t N TIMEOUT为N秒 read 从标准输入中读取值,给每个单词分配一个变量。 6、所有剩余单词都被分配给最后一个变量 read -p "Enter a filename: " FILE (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |