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

 

posted @ 2019-12-07 17:04  佛祖的腿毛  阅读(371)  评论(0编辑  收藏  举报