向一位计算机学院的朋友学习,共同交流学习上的认识,取长补短,两个人喜好兴趣甚至价值观相同,从不互相阿谀逢迎,让我有种找到知己的感觉。以人为镜可以知得失,再次相会,吾俩这半年付出了相同的时间得到的和失去了什么?计算机科学系,所习技术知识比鄙人全面、系统。遂借来书籍,以补不足。
导读:
什么是shell?
为什么用shell?
怎么用?
shell编程
什么是shell?
shell基本上是一个命令解释器,类似于DOS下的command。用于接收用户命令(如ls等)。shell编程就是把与系统内核交互的相关命令按照规范的格式组织到一起,形成的文件就构成了shell脚本程序。
为什么用shell?
在各种操作系统中,用户都要通过特定的界面与系统内核打交道,达到运用计算机解决问题的目的。shell是用户和内核交媒介的一种。合理的运用shell程序可以提高计算机的工作效率,为用户管理和使用计算机提供便利。
怎么用shell?
使用一门语言首先要明确目的 -- 要实现什么效果,其次要掌握语言的语法,只有正确的语法才能正确的使用语言工具,最后要形成具体的算法逻辑来实现你的想法。如果都没问题了,那么开始吧!
三-语法:
3.1-bash程序设计:
一个简单的shell程序示例:
#! /bin/bash # a simple shell script example : # a say hello function function say_hello(){ echo -n "Please Enter Your Name :" read name echo "$name : hello world ! " } echo "The Programme Starts Here ... " say_hello echo "The Programme Ends . "
$ bash helloWorld.sh
运行效果:
体会:
定义了 用户函数say_hello(),{
echo打印字符串,read读取中隐式定义一个变量并从键盘赋值,$变量名 去引用方才的变量}
直接使用函数名来调用函数,
Q:导包呢?main函数呢?暂时不需要还是用不到?隐式声明方便了用户还是简化了解释器?弱数据类型优缺点在哪?
不用分号和显示声明变量码代码简直爽爆了hhh
第六门语言学起来终于不再举步维艰,学java时淡忘了c指针c++引用,学完shell希望不要丢了显示声明和分号haha.
3.2-变量的声明和使用:
声明:隐式声明,弱数据类型
隐式声明意味着变量不需要声明就可以使用,弱数据类型就是说对变量类型不严格要求,这样使得脚本语言变得十分灵活,但是,对变量的类型检查任务就落到了程序开发者自己肩上了,解释器会为你做什么呢?
赋值: 变量名=值 *不能留空格
使用:
引用: $ 、${}
例如:
a="hello world" b="please enter your name:" echo "$b " read name echo "{$name}:${a}"
3.3-运算符:
算数运算符:
- + 加法运算符
- - 减法(取负)运算符
- * 乘法运算符
- / 整除运算符(不接受浮点 ,计算浮点需要调用计算器 bc awk [例link] )
- % 取模运算符
逻辑运算符:&& || ! != == > >= < <=
- && 逻辑与:当且仅当左右表达式的值都为真的时候返回真
- || 逻辑或:只要左右表达式有一个值为真,就返回真
- ! 逻辑非:(取反),对右边表达式值(真假)取反
- != 不等于:若左右两边表达式的值不相等,则返回真,否则返回假
- == 等于 :若左右两边表达式的值相等,则返回真,否则返回假
- > >= 大于/大于等于:当左边的表达式的值大于/大于等于右边的值时,返回真,否则返回假。< <= 小于/小于等于 相反。
赋值运算符:
- +=
- -=
- *=
- /=
- %=
*位运算符:<< >> & | ~ ^
*位运算赋值运算符:<<= >>= &= |= ~= ^=
表达式的计算:
expr [表达式] 计算一个表达式的值 #需有空格 (详细具体的例子见 link-> [github 源码])
expr 3 + 5let [表达式1][表达式2] (具体的例子见 link-> [github 源码])
let s=(3+5)*15
3.4-条件判断:
测试文件属性
test
[]
测试字符串属性
str1 = str2
3.5-控制结构:
if fi
case
for
while/until
3.6-函数:
function funName(){
}
3.7-程序示例:
自己动手敲一个能跑的,
- 自动文件备份{backup、log}
- 自动搭建开发环境{service、server、deveKit}
小结:
学习途中遇到的问题:
Q1:0真1假,但是if [ 0 ] 为真的 真相 [ link ]