编译型语言 : 例如:C语言, 只有写完代码后通过编译器进行编译,没有错误以后才能够,生成执行文件, 如果你有错误是不能生成执行文件,的 得先编译后执行. 编译语言用到了编译器, 不同的编译器生成的执行文件是不一样的.
例如 :我用gcc生成的文件运行在 x86的机器上, 如果我换成arm - gcc这个时候我所生成的执行文件只能在arm gcc上运行, 编译语言会受到编译器的限制
解释型语言 : 不需要代码编译通过之后再执行, 它是解释一行执行一行, 效率比较低
shell命令的本质就是 shell命令的有序集合
shell脚本是由命令组成,所以不需要编译器, 所以我只需要为文件赋予一个执行权限就可以了,赋予了执行权限以后将来我就可以在命令行上来去执行这个shell文件
打印的时候 echo $变量名 注意加上 $ 提示符
unset 删除变量的赋值
位置变量 也叫命令行参数, 咋写C语言的时候我们写main函数, main函数也是可以传参的 a.out 后面也是可以加参数的 如果我希望在执行脚本的时候 用户就提前给定一些变量的值的话,那么我们的这个位置的话也可以这么来处理 ,充分利用我们这个脚本的位置变量, 脚本当中的位置变量的话比较特殊, 用 $符号来标识,
输入命令的时候 空格为分隔符 , 这个 $# 不含./文件名本身的 , 跟c语言不一样,c语言会把这个./文件名也算上
./prog2.sh 29 hello 5.5 1 asd 所以输层的 $# 是5
我们利用 ${10}
注意 :$0是从脚本开始的, 从$1开始才是参数 ,如果参数大于两位数的时候 要用{}括起来
在编写C语言源代码时,应该多使用注释,这样有助于对代码的理解。在C语言中有两种注释方式:
一种是以/开始、以/结束的块注释(block comment);
另一种是以//开始、以换行符结束的单行注释(line comment)。
可以使用/和/分隔符来标注一行内的注释,也可以标注多行的注释。例如,在下列的函数原型中,省略号的意思是 open() 函数有第三个参数,它是可选参数。注释解释了这个可选参数的用法:
int open( const char *name, int mode, … /* int permissions */ );
可以使用//插入整行的注释,或者将源代码写成两列分栏的格式,程序在左列,注释在右列:
const double pi = 3.1415926536; // pi是—个常量
在 C99 标准中,单行注释正式加入C语言,但是大部分编译器在 C99 之前就已经开始支持这种用法。有时候,其被称作“C++风格”的注释,但实际上,其源自于C的前身 BCPL。
在引号中,如果采用/*或//分隔一个字符常量或字符串字面量(string literal),它们都不会被视为注释的开始。例如,下面语句就没有注释:
printf("Comments in C begin with /* or //.\n" );
预处理器仅通过检查注释的结束符来检测注释中的字符,因此,不能嵌套块注释。然而,可以使用/和/注释包含单行注释的源代码:
/* 暂时注释掉这两行:
const double pi = 3.1415926536; // pi是一个常量
area = pi * r * r; // 计算面积
暂时注释到此 */
如果想要注释掉包含块注释的部分程序,可以使用条件预处理命令:
#if 0
const double pi = 3.1415926536; /* pi是一个常量 */
area = pi * r * r ; /* 计算面积 */
#endif
预处理器会把每个注释都替换成一个空格。因此,min/max/Value变成两个标记min Value。
算术运算需要空格, 变量赋值不需要空格
cp复制命令的好处是,可以一并把文件的属性复制过去
条件语句 : 两路分支语句
注意空格不能少
这里的判断语句中 $1 你也可以写成 read 命令让用户自己输入文件
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
下面的例子定义了一个函数并进行调用:
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
输出结果
-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----