编程语言:
-
机器语言
-
汇编语言
-
高级语言
高级语言:
- 静态语言:编译型语言,有一个程序开发环境,不需要借助特定的二进制程序,写完代码需要一个编译器将其直接转换成二进制可以独立运行的。通常都是强类型的语言,强类型通常指的都是变量类型。关键字能直接被编译器转换成二进制码。程序在执行之前就要完全转换成二进制码。(事先转换成可执行格式)
- c语言、c++、JAVA、c#
- 强类型:变量在使用前,必须事先声明,甚至还要初始化
- 动态语言:解释性语言,通常都是弱类型语言。程序只有在一条一条执行的时候才进行转换成二进制码。(边解释边执行)
- Python、ASP、PHP、shell、perl
- 弱类型:变量随用随声明,甚至不区分类型。(默认存储都是字符串)
解释器通常都是静态语言开发的
面向对象和面向过程:
面向过程(shell、c):把编程立足点主要在于问题解决的过程本身
面向对象(JAVA、Python):把实现的项目抽象成一个一个的对象,并且定义对象之间的动作来完成的。
变量:内存空间,使用变量名来引用变量的时候叫命名的内存空间
内存是编址的存储单元,每一个字节都有一个全局唯一的地址(物理内存)来找到它。
变量:
存储字符10和存储数值10有什么不同:
字符10:两个ASCⅡ码,一个ASCⅡ占8位,两个占16位。
数值10:转换成二进制位1010,但是最小存储单位是8位。所以就有了变量类型。
常见的变量类型:事先确定数据的存储格式和长度
-
字符型:
-
数值型:
- 整形:
- 浮点型:
-
布尔型
bash变量类型:
环境变量:作用域为当前shell进程及其子进程,使用export关键字,重开一个则无效
本地变量(局部变量):本地变量:作用于为当前代码段、局部变量:作用域为当前代码段
[root@localhost ~]# name=lxw
[root@localhost ~]# echo $name
lxw
[root@localhost ~]# bash—————>上一个 shell的子shell,
不同的shell是两个不同的进程,父shell中命令的变量在子shell中用不了。
[root@localhost ~]# echo $name
引用变量:引用变量要使用{},只不过{}有时候可以省略不写
[root@localhost ~]# echo $name
lxw
[root@localhost ~]# echo "$names ymy"
ymy
[root@localhost ~]# echo "${name}s ymy"
lxws ymy
位置变量:$1,$2…
特殊变量: #…
&> 同时重定向
撤销变量:unset 变量名
查看变量:set(包括环境变量和本地变量)
env/printenv/export(查看环境变量)
给变量添加新值:
[root@localhost ~]# animals=pig
[root@localhost ~]# animals=$animals:goat
[root@localhost ~]# animals=$animals,sheep
[root@localhost ~]# echo $animals
pig:goat,sheep
export PATH=$PATH:/usr/local/apache/bin
脚本是什么:脚本就是程序的源代码,通常就是命令的堆砌。
直接写在脚本中的命令不能直接运行:因为Linux内核只认识ELF文件格式,而我们写完的只是ASC码格式。
shebang:指定程序的魔数,必须以#!开头,后边跟上解释器路径。
脚本不能直接执行:要么把当前路径添加到PATH环境变量中,然后执行该脚本,要么给脚本文件添加x权限,写清楚脚本文件的绝对路径,然后执行该脚本
条件测试类型:
整数测试:$a是否等于6等等
字符测试:某一个字符串中的字符是不是abcd
文件测试:判断一个文件是否存在
变量名称:只能包含字母、数字、下划线,并且不能以下划线开头,不能跟系统中已有的环境变量重名,最好做到见名知意。
命令间的逻辑关系:
逻辑与:&& 有假为假
第一个条件为假时,第二个条件不用再判断,最终结果已经有显示
第一个条件为真,第二个条件必须在判断,最终结果取决于第二条件
逻辑或:|| 有真为真
条件判断:
单分支的if语句
if 判断条件;then
fi
双分支的if语句:
if 判断条件;then
。。。
else
。。。
fi
要是想引用这个命令的执行状态结果返回值,一定不能给这个命令加引号。
引用命令的执行结果,可以给命令加反引号
#!/bin/bash
grep "\<bash$" /etc/passwd &> /dev/null------>引用命令执行状态结果,不能加引号
RETVAL=$?
if [ $RETVAL -eq 0 ];then
USER= `grep "\<bash$" /etc/passwd |wc -l`------>引用命令执行结果,要加引号
else
echo "no such user."
fi
空白行: /^$/
shell中如何进行算术运算:
A=3 B=6
1、let 算数运算表达式
let C=A+B
2、$ [ 算术表达式 ]
C=$ [ B]
3、$(( 算术表达式))
C= A+$B))
4、expr 算数运算表达式,表达式中各操作及运算符之间要有空格,而且要使用命令引用
C=` expr $A + $B ``——————(一个反引号)
提前结束脚本进程命令:exit (0-255)——>用于定义程序执行状态结果,不定义则将exit前一句的命令执行状态结果作为整个脚本的命令执行结果。
USERNAME=user1
if ! grep “^$USERNAME\ >” /etc/passwd &>/dev/null;then
echo “no such”
测试的表达式:
[ expression ] :命令测试法(bash的命令)
[[ expression ]]:关键字测试法(bash的关键字)
test expression:
测试两个数是否相等,以下方法都行
INT1=63
INT2=77
[ $INT1 -eq $INT2 ]
[[ $INT1 -eq $INT2 ]]
test $INT1 -eq $INT2
if((0==4%2)) 小括号
if [[ 0 -eq 4%2 ]] 中括号
if [ `grep "^USERNAME\" /etc/passwd` -eq 0];then
此时不能使用中括号,因为grep命令执行下来是一行或者多行的筛选结果,是程序执行结果,并不是程序执行状态结果。
if [ `grep "^USERNAME\" /etc/passwd |cut -d: -f3` -eq 0];then
这个可以,因为该命令执行完是判断用户的ID号是否为0。
bash中常用的条件测试有三种:整数测试、文件测试、
整数比较:
只有在进行整数测试的时候才必须用中括号
-eq(equal):测试两个整数是否相等,相等为真,不等为假
-ne(no equal):测试两个整数是否不等。不等为真,相等为假
-gt(great than):测试一个数是否大于另一个数,大于为真,否则为假
-lt(less than):小于为真,否则为假
-ge:大于或等于
-lt:小于或等于
shell中会进行圆整运算:就是小数点后的数字全部丢弃,不管其大小。
文件测试:
1、测试文件是否存在:
-e file:测试文件是否存在
[ -e /etc/inittab ]
-f file:测试文件是否为普通文件
-d file:测试文件是否为目录文件
-r file:测试当前文件对当前用户来讲是否可读
[ -x /etc/rc.d.sysinit ]
-w file:测试当前文件对当前用户来讲是否可写
-x file:测试当前文件对当前用户来讲是否可执行
[ -e /etc/inittab ] && echo "存在" || echo "不存在"