标签:Linux之路
编程基础程序:指令+数据
程序编程风格:
过程式:以指令为中心,数据服务于指令
对象式:以数据为中心,指令服务于数据
shell程序:提供了编程能力,解释执行
程序的执行方式
计算机:运行二进制指令
编程语言:
低级:汇编
高级:
编译:高级语言-->编译器-->目标代码 java,C#
解释:高级语言-->解释器-->机器代码 shell, perl, python
编程逻辑处理方式:
对于shell脚本来是,它是一种弱类型,过程式的语言。不包括浮点型。
> 强类型:一个变量给他确定一个类型,赋值后,这个类型不可改变。
弱类型一个变量你不用给它指定类型,拿来就用。以至于拿到一个变量,你不知道它是个什么类型,默认是字符型。参与运算会自动进行隐式类型转换,变量无需事先定义可以直接调用。
shell脚本的用途有:
shell脚本: 包含一些命令或声明,并符合一定格式的文本文件
第一步:使用文本编辑器来创建文本文件
格式要求:首行shebang机制
第二步:运行脚本
给予执行权限,在命令行上指定脚本的绝对或相对路径
直接运行解释器,将脚本作为解释器程序的参数运行
脚本规范
脚本代码开头约定
1、第一行一般为调用使用的语言
2、程序名,避免更改文件名为无法找到正确的文件
3、版本号
4、更改后的时间
5、作者相关信息
6、该程序的作用,及注意事项
7、最后是各版本的更新简要说明
我们知道,一台Linux主机开机运行时,系统启动什么样的shell时,是由用户的个ID配置决定。也就是在/etc/passwd文件中个人用户的第7个字段决定。
我们目前所启用远程连接的伪终端还是物理机上开的虚拟终端开启的默认 shell为父shell。而在系统中输入bash或/bin/bash 会开启一个子shell
变量赋值:name="value"
- 可以直接是字符串:name="username"
- 变量引用:name="$PATH"
- 命令引用:name=`cmd` name=$(cmd)
变量引用中的强引用与弱引用
“”:弱引用,变量引用会被替换为变量值
‘‘:强引用,变量引用不会被替换,而保持原字符串。
注意
shell脚本里定义的变量在脚本的整个生命周期里有效,但在shell脚本结束时会被删除掉。
变量命名法则:
环境(全局)变量:生效范围为当前shell进程及其子进程
子进程可以用父进程的定义的变量也可以对变量进行更改,改完之后不能传给上级进程,但可以传给下级进程。
位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ...:对应第1、第2等参数,shift [n]换位置
shift的用法:无法判断用户会输入几个参数,有两种方法来判断
1、先获取参数的个数。再来处理。
2、不管参数有多少,用shift,把参数住左移,默认是移一位,移多少位,在后面加个数字。
脚本调试
查看变量与进程号
set 显示已定义的所有变量
销毁变量:unset name
变量使用完毕以后,用unset将变量删掉。在程序运行期间,变量不会在内存中释放空间的。日积月累,会被占用内存的空间。
bash内建的环境变量:
声明只读变量:
小括号与大括号的用
加上小括号相当于开了子进程,执行完又退回到父进程。可以认为是一次性任务,不影响当前进程
大括号不开启shell,会影响当前环境。
它们的相同点是:把括号里的命令做为一个整体,统一执行。
[root@centos7 bin]#x=1;echo "pid=$$";(echo "subpid=$$";echo "subx=$x";x=2;echo "subx2=$x");echo x=$x
pid=3201
subpid=3201
subx=1
subx2=2
x=1
小括号的特性:这种开启子shell可继承父进程的变量和进程编号。
[root@centos7 ~]#false || (echo cmd1;exit)
cmd1
[root@centos7 ~]#false || { echo cmd1;exit; }
cmd1
logout
写脚本时用小括号 是退不出脚本的。
退出状态
进程使用退出状态来报告成功或失败
退出状态码
###逻辑运算
异或:
相同为假flase
不同为真true
[root@centos7 ~]#a=4
[root@centos7 ~]#b=6
[root@centos7 ~]#echo $a $b
4 6
[root@centos7 ~]#a=$[a^b];b=$[a^b];a=$[a^b];echo $a $b
6 4
[root@centos7 bin]#false || echo cmd1 && echo cmd2
cmd1
cmd2
[root@centos7 bin]#true || echo cmd1 && echo cmd2
cmd2
[root@centos7 bin]#true || (echo cmd1;echo cmd2)
[root@centos7 bin]#false || (echo cmd1;echo cmd2)
cmd1
cmd2
判断某需求是否满足,需要由测试机制来实现
专用的测试表达式需要由测试命令辅助完成测试过程
?评估布尔声明,以便用在条件性执行中
?若真,则返回0
?若假,则返回1
?测试命令:
?test EXPRESSION
?[ EXPRESSION ]
?[[ EXPRESSION ]]
注意:EXPRESSION前后必须有空白字符
?根据退出状态而定,命令可以有条件地运行
?&& 代表条件性的AND THEN
?|| 代表条件性的OR ELSE
bash的字符串测试
用到时正则表达式用两个中括号 ,test与一个中括号 是等价的。
bash的数值测试
注意
变量在中括号里写时要加双引号
当判断软链接时,判断的是软链接指向的文件。
判断权限判断的是实际权限
标签:Linux之路
原文地址:http://blog.51cto.com/12646134/2103738