一.基础知识
#-----------------/test.sh--------------
#!/bin/bash
#命令解释器
:<<BLOCK #块注释
本脚本的作用是输出一行字符串
BLOCK
echo "hello world!"
1. #! 指定命令解读器,就是告诉你接下来的命令应该调用什么来执行。
比如可以用#!/bin/sh #!/bin/csh #!/bin/more 等等来替换。 使用more的结果就是把命令输出来.
2. 行注释用 #
2. 行注释用 #
块注释用 :<< BLOCK
****
BLOCK
3. 如何执行shell程序
3. 如何执行shell程序
chmod +x test.sh 加执行权限
. /test.sh 执行
4.shell 解释性语言,即他的代码会一行接着一行的执行。
5.$(ls) 相当于执行 ls命令,只用 ls 也可以
二.编程基础
1.变量声明和使用
BASH中有3种变量 ,用户自定义变量,系统变量,环境变量。
1.1用户自定义变量
bash中的变量是弱变量,弱变量的特点是声明变量不用声明类型和可以存储不同类型的值。大小写区分。
变量=值 //等号两边不能有空格
a=1
b="string"
虽然通过以上方式可以很方便的定义变量,但是对于变量的某些属性却不容易控制,例如,变量的类型和读写属性等。
所以为了更好的控制变量的相关属性,Bash提供了一个名称为declare的命令来声明变量。declare又名typeset
语法:declare attribute variable
declare -i num #定义变量x为整数
declare +i num #取消变量x的整数属性
declare -r num #声明num为只读变量
decalre -x num #声明num为环境变量
-p 显示所有变量的值
-i 将变量定义为整数。在之后就可以直接对表达式求值,结果只能是整数。如果求值失败或者不是整数就设置0.
-r 将变量声明为只读变量。 不允许修改,删除。
-x 将变量设置为环境变量,这样在随后的脚本和程序中可以使用。
-a 声明变量为数组变量,但是没有必要。因为本来就是弱变量。
-f 显示所有自定义函数,包括名称和函数体
1.2系统变量
系统变量主要在参数判断和命令返回值判断时使用。包括脚本和函数参数,以及脚本和函数的返回值。
以下是常用的系统变量。


1.3环境变量
环境变量是所有shell程序都可以使用的变量,环境变量会影响到所有脚本的执行结果。
可以使用 set 命令 列出所有的环境变量。
下面是常用的环境变量。


1.4变量的使用
对变量的调用需要在前加$号,对于多字符的变量,建议采用{}把变量括起来
a=3; abc=4
echo "$a , ${abc}"
变量的使用一般配合引号的应用。
双引号 : 除 ($ , ' '," " ,\) 美元号,单引号,双引号,反斜线之外,其他所有的字符都将保持字面意义。
单引号 : 引号内所有字符都保存字面意义
反引号 : 反引号内的字符串将被解释为Shell 命令
反斜线 : 转义字符,屏蔽其后的字符的特殊意义

2.算术运算
常用的
运算符有 加(+)减( -)乘( *)除( /)求余( %)幂( **)
可以通过4种方式来执行算术运算,expr 和let 效率不如$((...)) 和 $[...]
1.使用expr外部程序
note: 1.使用反引号,2.运算符两边一定要有空格 3.使用乘号 和括号的时候需要加转义字符\ .
可以看到这种方法真的是很繁琐。

2.使用$((...))
note: 运算符旁边空格可加可不加,不需转义

方便吧!!
3.使用$[...]
使用方法与效果同上
4.使用let命令

3.条件判断
bash程序的判断与C语言等有一些区别,条件判断的结果为0表示真,结果为1表示假,刚好与C语言相反。
可用于与比较的有4类:
- 字符串的关系
- 整数的关系
- 文件是否存在或是否具有某种状态或属性
- 多个条件的逻辑组合
判断的格式有两种:
- test condtion
- [ condtion ] 注意 中括号[] 边要有空格,运算符 左右有空格,字符串最好用“ ” 引起来
字符串判断:

整数判断:

文件判断:

逻辑判断:

4.控制结构
控制结构分顺序,分支,循环
分支包括 if分支,case 分支
循环包括 for循环,while循环,until循环
IF:

CASE:

For 循环
#for 循环
结构 for var [in {..} ]
do
echo "hello"
done
for var in { 列表 }
example:
for var in 1 2 3 4 5 6 7
for var in {1..8} 从1到8
for var in {1..100..2} 初始值1,结束值为100,步进为2
for var in {Mon Tue Wed Thu Fri Sat Sun}
for var in $(ls) 这个和下面两个作用相同
for var in `ls`
for var in *
for var in $*
不带列表的for循环
for var
等价于 for var in $* 也等价于 for var in $@
类C风格的for循环
for ((i=1;i<5;i++))
while循环
while expression
do
echo "hello"
done
until循环
until expression
do
echo "hello"
done
另外用在循环里面的还有break,continue 命令;
五.函数定义
函数名()
{
命令
}
func()
{
echo "hello"
}
函数使用
func "$2" "$3" //传参数
在传参数这里注意,$* $@ $n 这些变量 在函数里也可以使用,且函数参数的$0 仍然是脚本name。
// 但是要注意的是 我们传的参数是主函数的$2,$3,在func函数里就是$1,$2