Shell 基本语法
说到Linux那必然要少不了Shell,Shell编程的语法格式还是有很大的特点。
首先学习每一中编程的第一段代码总是 Hello Word
Shell 中 :
echo "Hello Word"; #竟然和PHP一模一样
1.变量定义以及命名
命名规则 :(1) 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
(2) 中间不能有空格,可以使用下划线(_)。
(3) 不能使用标点符号。
(4) 不能使用bash里的关键字(可用help命令查看保留关键字)。
PS:变量定义不需要任何修饰符,并且 = 左右不可有空格,必须紧挨着,shell中空格有着很大作用,定义数组就会发现。
Shell变量命名实例:
name="xiaoming"; echo $name;
2.变量的使用
当定义完变量后我们使用变量是需要加上$符号啦
实例:
name="xiongming"; echo $name; echo ${name};
以上两种使用方式都可行,第一种比较简便,十分类似php变量,第二种则更加严谨同时也有其他用法
echo ${#name} 可以输出name变量长度 #特殊符合可以用来统计字符串长度和数组长度
3.数组的定义
当定义数组时便能体会空格的特殊作用
number=(1 2 3 4 5); number[0]=1; number[1]=2; number[2]=3; number[3]=4; number[4]=5;
以上便是Shell定义数组的两种方式,shell并不直接支持二维数组,但也可以构造出来,可以通过for循环来使用二维数组的键值
构造二维数组
array=('name age sex' 'width height length' 'black red white'); echo ${array[@]}; echo ${array[*]};
echo ${#array[@]};
使用数组时,@、* 表示引用数组的所有值, # 表示数组长度。
4.函数的定义以及参数的传递
shell中的参数传递不需要预定义传输哪些参数
所有传递的参数会用 $1 $2 $3 ... 自动调用传递的第几个参数
注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
$0是Bash中的特殊参数,$ 0是正在运行的进程的名称。如果在shell内部使用它,则它将返回shell的名称。如果在脚本内部使用它,它将是脚本的名称。
实例:
param_test(){ echo "$0是当前shell名称"; echo "$1是第一个参数"; echo "$2是第二个参数"; echo "$3是第三个参数"; } param_test 1 2 3
5.For循环的使用
for循环的使用有多种方式,这里就展示两种常用的格式
list=(1 2 3 4 5); for i in list #list 是一个数组控制了循环的次数,循环次数即数组长度 do #这里执行需要操作的命令 echo "$i" done ########第二种方式 for((i=1;i<=5;i++)) do echo "这是第$i此循环" done
6.While循环的使用
实例:
num=5 while(( $num<=10 )) do echo $num let "$num++"; done
7.运算操作符的使用
shell中的运算操作符就比较特殊了,不像常规编程语言那样直接使用运算符号就可以计算
要想使用运算就必须使用命令 expr 或 let
7.1 expr的使用个人觉的比较麻烦 还需要用到反引号包含 `运算表达式` ,表达式和运算符之间要有空格,例如 2+2 是不对的 必须是 2 + 2
num=`expr 2 + 3` echo $num num=`expr 2 \* 3` echo $num #使用乘法 必须在 * 号前加上反斜杠 num=`expr 8 \ 2` echo $num num=`expr 8 - 2` echo $num
7.2 let 的使用就比较方便快捷了,而且经过测试执行效率也比expr快上几十倍,运算符和数字之间就不能有空格,等号左右也不能有空格
let num=2+3 echo $num let num=2-3 echo $num let num=2*3 echo $num let num=8/2 echo $num
8. 关系运算符
-eq 检测两个数是否相等,相等返回 true。 (equal)
-ne 检测两个数是否不相等,不相等返回 true。 (not equal)
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 (greater than)
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 (Less than)
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 (Greater than or equal to)
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。(Less than or equal to)
PS : 这些关系运算符 我会觉得难记,但也确实难记感觉好混乱,可是它们都是英文缩写过来的记住英文就很简单了
a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a 等于 b" else echo "$a -eq $b: a 不等于 b" fi if [ $a -ne $b ] then echo "$a -ne $b: a 不等于 b" else echo "$a -ne $b : a 等于 b" fi if [ $a -gt $b ] then echo "$a -gt $b: a 大于 b" else echo "$a -gt $b: a 不大于 b" fi
9.布尔运算符
! 非运算
-o 或运算
-a 与运算
a=10 b=20 if [ $a != $b ] then echo "$a != $b : a 不等于 b" else echo "$a == $b: a 等于 b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a 小于 100 且 $b 大于 15 : 返回 true" else echo "$a 小于 100 且 $b 大于 15 : 返回 false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a 小于 100 或 $b 大于 100 : 返回 true" else echo "$a 小于 100 或 $b 大于 100 : 返回 false" fi
10.逻辑运算符
这与我们常规的编程语言是相同的
&& 逻辑 AND
|| 逻辑 OR
a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
11. IF运算符
每个 if 和 elif 后面要接上then,最后一个 else 则不需要then ,必须要以 fi 结尾。如果 elif 后面没有需要执行的语句则不可以写这个elif,不可留空
a=10; b=20; if [ $a == $b ] then echo "相等" elif then echo "不相等" else echo "没有任何符合" fi