一、shell编程
1、编程语言:机器语言、汇编语言、高级语言;
a)高级语言:
静态语言:编辑型语言,通常是强类型(变量)语言,用关键字使被解释器后者编译器转换成被机器识别的代码或者指令,事先转换成可执行格式,转换完成后运行;
变量在使用前,必须事先声明,甚至还需要初始化为空(NULL);
c、c++、JAVA、C#等为静态语言;
动态语言:解释型语言,通常是弱类型语言,用解释器或转换器边解释边执行(on the fly),在执行的时候开始转换;
变量使用时才声明,甚至不区分类型,默认为字符串;
ASP、PHP、Shell、python、perl等为动态语言;
b)面向过程的语言:把编程的立足点在问题解决的过程本身,shell、C为面向过程语言;
c)面相对象的语言:把编程的立足点在问题解决的结果本身,JAVA、Python、perl、c++为面相对象语言;
d)变量:内存空间,命名的内存空间,变量时不断变化的。
内存:编址的存储单元;
如:二进制10装换成字符是16bit,十进制10转换成字符二进制是1010。至于需要转换成哪种类型,所以需要变量类型;
e)变量类型:包括,字符和数值。事先确定数据的存储格式和长度;
数值类型:整型、浮点型、布尔型(真假型)、日期时间型等等;
2、逻辑运算(1:真, 0:假);
a)与运算,两者为真才为真,一个为假结果一定为假:
1&0 = 0
0&1 = 0
0&0 = 0
1&1 = 1
b)或运算,一个为真结果一定为真:
1&0 = 1
0&1 = 1
0&0 = 0
1&1 = 1
c)非运算:
!真 = 假
!假 = 真假
d)异或运算,两者相同为假,不同为真:
1&0 = 1
0&1 = 1
0&0 = 0
1&1 = 0
二、bash变量
1、变量赋值:VAR_NAME=VALUE;
2、bash变量类型:
a)环境变量:
export VARNAME=VALUE,作用域为当前shell进程及其子进程;
b)本地变量(局部变量):
本地变量:VARNAME=VALUE,作用域为整个bash进程都可以使用;
局部变量:local VARNAME=VALUE,作用域为当前代码段;
c)位置变量:
$1, $2, ...
d)特殊变量,保存某些特殊命令的:
$?:保存上一个命令的执行状态的返回值;
程序状态返回代码(0-255):
0:正确执行;
1-255:错误执行,1,2,127系统预留的;
3、引用变量或变量替换:${VARNAME},括号有时可省略;
如:# ANIMAL=pig
# echo "There are some ${ANIMAL}s."
4、脚本在执行时会启动一个子shell进程:
a)命令行中启动的脚本汇继承当前shell环境变量;
b)系统自动执行的脚本(非命令行启动)就需要自我定义需要的各环境变量;
5、撤销变量:unset VARNAME;
6、查看当前shell中的变量
a)set:当前shell中所有变量;
b)printenv=env=export:查看当前shell中的环境变量;
7、补充增加变量命令格式
如:# ANIMAL=pig
# ANIMAL=$ANIMAL:goat
# ANIMAL=$ANIMAL:sheep
三、输出重定向(补充内容)
1、>, >>, 2>, 2>>, &>;
2、/dev/null:软件设备,bit bucket(数据黑洞):
如:id student &> /dev/null;
四、如何编写脚本
1、脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序;
2、shebang:魔数,每个脚本的第一行必须指定魔数,作为内核解读脚本的解读器--#!/bin/bash;
如:编写脚本同时执行cat /etc/fstab和ls /var命令:
# nano first.sh
#!/bin/bash
cat /etc/fstab
ls /var
# bash ./first.sh
练习:写一个脚本,完成以下任务:
1、添加5个用户user1-user5,每个用户添加完成后,都要显示用户某某已经添加成功;
2、每个用户的密码同用户名,而且要求:添加密码完成后不显示passwd命令的执行结果信息;
# nano user.sh
#!/bin/bash
useradd user1
echo "user1" | passwd --stdin user1 &> /dev/null
echo "Add user1 sucessfull."
#bash ./user.sh 。
本文出自 “Nick Liu的博文” 博客,请务必保留此出处http://zkhylt.blog.51cto.com/3638719/1394732