shell编程:
编译器,解释器
编程语言:机器语言、汇编语言、高级语言静态语言:C C++ JAVA C# 强类型(变量)事先转换成可执行格式编译型语言 开发环境不需要借助额外的二进制程序,直接写代码用编译器将其直接转换为二进制可以独立运行的
动态语言:解释型语言PHP SHELL python per1 弱类型 不是绝对的 边解释边执行面向过程:shell C 解决问题过程面向对象:java Python per1 C++ 定义对象执行的动作变量:内存空间,命名内存:编制的存储单元linux内核就是面向过程的C语言开发的 ,每种语言只有更适应它的地方变量类型:事先确定数据的存储格式和长度字符数值 整型 浮点型11.23 1.123*10^1 整型:8bit:2560-256 溢出变量:1,10000 10:16bit10:1010,8bit逻辑:1+1>2逻辑运算:与(相乘)、或(相加)、非、异或(相同为零)1:真0:假shell:弱类型编程语言强:变量在使用前,必须事先声明,甚至还需要初始化:不一定初始化
NULL:弱:变量用时声明,甚至不区分类型变量赋值:VAR_NAME=VALUEbash变量类型:环境变量本地变量(局部变量)函数位置变量特殊变量本地变量:bash:VARNAME=VALUE:作用域为整个bash进程local VARNAME=VALUE:局部变量只对当前代码有效name=tomecho "there are some ${name}s."引用变量:${varname},括号有时可省略双引号是将变量转换,单引号不作变量转换局部变量:local VARNAME=VALUE:作用域为当前代码段环境变量:作用域为当前shell进程及其子进程export VARNAME=VALUEVARNAME=VALUEexport VARNAME “导出”export name=tom位置变量:$1,$2,....特殊变量:$?:保存上一个命令的执行状态返回值程序执行:可以能两类返回值: 程序执行结果 程序状态返回代码(0-255) 0:正确执行 1-255:错误执行 1、2、127系统预留了 输出重定向: >>>2>2>> /dev/null:软件模拟的设备 ,bit bucket,位桶,理解成:数据黑洞 不显示信息撤消变量:unset VARNAME 查看当前shell中的变量set 所有变量查看当前shell中的环境变量printenvenvexportanimal=piganimal=$animal:goatecho $PATHexport PATH=$PATH:/usr/local/apache/bin 添加路径在后面export PATH=/usr/local/apache/bin:$PATH添加路径在前面脚本在执行时会启动一个子shell进程:命令行中启动的脚本会继承当前shell环境变量:系统自动执行的脚本(非命令行启动)就需要自我定义需要各环境变量:引用变量:${VARNAME},括号有时可省略a=2b=3c=$a+$becho $c脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序file /bin/ls shebang:指定程序的魔数必须以#!开头 后面是跟是以什么格式写的路径which 查看bash的位置#!/bin/bash bash在bin目录下echo "Add user1 successfully." 显示执行成功 #注释行被忽略的pwd 查看当前路径PATH=/root:$PATH 将路径加入环境chmod u+x 1 添加文件的执行权限1 执行文件直接bash 1也可以条件判断:如果用户不存在 添加用户,给密码并显示添加成功: 否则 显示如果已经存在,没有添加bash中如何实现条件判断?条件测试类型: 整数测试 字符测试 文件测试条件测试的表达式:[ expression ]必须有一个空格 `expression`关键字test + expression 整数比较():A=3B=6[ $A -eq $B ]-eq:测试两个整数是否相等:相等,为真;不等,为假-ne:测试两个整数是否不等:不等,为真:相等,为假-gt:测试一个数是否大于另一个数:大于,为真;否则,为假-lt:测试一个数是否小于另一个数:小于,为真;否则,为假-ge:大于或等于-le:小于或等于id tom &> /dev/null && echo "hello,tom"! id tom3 && useradd tom3!表示反义词命令之间逻辑关系:逻辑与:&&第一个条件为假时,第二条件不用再判断,最终结果已经有第一个条件为真时,第二条件必须得判断逻辑或:||如果用户user6不存在,就添加用户user6id user6 || useradd user6如果/etc/inittab文件的行数大于100,就显示好大的文件['wc -l /etc/inittab | cut -d' '-f1' -gt 100 ] && echo "large file."变量名称:1.只能包含字母,数字和下划线,并且不能数字开头2.不应该跟系统中已有的环境变量重名3.最好做到见名知意#!/bin/bashLINES='wc -l /etc/inittab'echo $LINESFINLINES=echo '$LINES | cut -d'' -f1'echo $FINLINES[ $FINLINES -gt 100 ]&& echo "/etc/inittab is big file"条件判断,控制结构:(最好用比与或更好理解)单分支if语句if 指定判断条件;如果为真执行then statement1statement2..else 否则fi 结束双分支的if语句if指定判断条件;如果指定为真thenstatement1statement2..else 否则statement3statement4..fi 结束USERID='id -u $NAME3'#!/bin/bashgrep "\<bash$>" /etc/passwd &> /dev/nullRETVAL=$?if [ $RETVAL -eq 0 ];thenUSER='grep "\<bash$>" /etc/passwd | wc -1'echo "The shells of $USER users is bash."elseecho "No such user."fi''引用命令的执行结果shell中如何进行算术运算表达式a=2b=41.let 算术运算表达式let c=$a+$b2.$[算术运算表达式]c=$[$a+$b]3.$((算术运算表达式))c=$(($a+$b))4.expr算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用c='expr $a + $b'