基本语法掌握(shell 学习第二天)

Shell 传递参数

  • 执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

  • 其中 $0 为执行的文件名

#!/bin/bash

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

运行 及 结果:

$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
参数处理 说明
$# 传递到参数的个数
$* 以一个单字符串显示所有向脚本传递的参数。以"$1$2 3... 3... n"的形式输出所有参数
$$ 脚本运行的当前进程的ID号
$! 后台运行的最后一个进程的ID号
$@ 和$*不同,以"$1" " 2 " . . . " 2" ... " n"输出
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

数组:

  • 获取数组中的所有元素
    使用@ 或 * 可以获取数组中的所有元素。
 echo "数组的元素为: ${my_array[*]}"
 echo "数组的元素为: ${my_array[@]}"
  • 获取数组的长度
    获取数组长度的方法与获取字符串长度的方法相同
  echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
  • 注:数组的值也可以写入变量。

  • 根据数组元素索引获取该数组元素值时,数组下标可为变量。

  • 遍历数组,在就新手学习的时候注意一下 [ 和 $ 之间要有空格,没有空格运行会报错:

  • 提前感受一下遍历!!!

#!/bin/bash

my_arry=(a b "c","d" abc)
echo "-------FOR循环遍历输出数组--------"
for i in ${my_arry[@]};
do
  echo $i
done

echo "-------::::WHILE循环输出 使用 let i++ 自增:::::---------"
j=0
while [ $j -lt ${#my_arry[@]} ]
do
  echo ${my_arry[$j]}
  let j++
done

echo "--------:::WHILE循环输出 使用 let  "n++ "自增: 多了双引号,其实不用也可以:::---------"
n=0
while [ $n -lt ${#my_arry[@]} ]
do
  echo ${my_arry[$n]}
  let "n++"
done

echo "---------::::WHILE循环输出 使用 let m+=1 自增"
m=0
while [ $m -lt ${#my_arry[@]} ]
do
  echo ${my_arry[$m]}
  let m+=1
done

echo "-------::WHILE循环输出 使用 a=$[$a+1] 自增,个人觉得这种写法比较麻烦::::----------"
a=0
while [ $a -lt ${#my_arry[@]} ]
do
 echo ${my_arry[$a]}
 a=$[$a+1]
done

结果:

-------FOR循环遍历输出数组--------
a
b
c,d
abc
-------::::WHILE循环输出 使用 let i++ 自增:::::---------
a
b
c,d
abc
--------:::WHILE循环输出 使用 let  n++ 自增: 多了双引号,其实不用也可以:::---------
a
b
c,d
abc
---------::::WHILE循环输出 使用 let m+=1 自增
a
b
c,d
abc
-------::WHILE循环输出 使用 a=1 自增,个人觉得这种写法比较麻烦::::----------
a
b
c,d
abc

shell基本运算符

  • Shell 和其他编程语言一样,支持多种运算符,包括:

    • 算数运算符
    • 关系运算符
    • 布尔运算符
    • 字符串运算符
    • 文件测试运算符
  • 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

  • expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
    例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):

  • 算术运算符

在这里插入图片描述

#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

结果:

a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a 不等于 b

注:

  • 乘号(*)前边必须加反斜杠()才能实现乘法运算;
  • if…then…fi 是条件语句,后续将会讲解。
  • 在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 “*” 不需要转义符号 “” 。
关系运算符

在这里插入图片描述

  • 使用 [[ … ]] 条件判断结构,而不是 [ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、< 和 > 操作符能够正常存在于 [[ ]] 条件判断结构中,但是如果出现在 [ ] 结构中的话,会报错。
  1. 进行数值比较时,可以使用 [ expression1 OPexpression2 ],OP 可以为 -gt、-lt、-ge、-le、-eq、-ne 也可以使用 ((expression1 OP expression2)),OP 可以为 >、<、>=、<=、==、!=。这几个关系运算符都是测试整数表达式 expression1 和 expression2 之间的大小关系。
  2. <、==、!= 也可以进行字符串比较。

  3. 进行字符串比较时,== 可以使用 = 替代。
  4. == 和 !=进行字符串比较时,可以使用 [ string1 OP string2 ] 或者 [[ string1 OP string2 ]] 的形式。
  5. 和 < 进行字符串比较时,需要使用[[ string1 OP string2 ]] 或者 [ string1 \OP string2 ]。也就是使用 [] 时,> 和 < 需要使用反斜线转义。

布尔运算符

在这里插入图片描述

逻辑运算符

在这里插入图片描述

字符运算符

在这里插入图片描述

文件测试运算符

在这里插入图片描述

加法几种写法

Shell 相加目前发现有 3 种写法:
1.

a=10
b=20
c=`expr ${a} + ${b}`
echo "$c"
c=$[ `expr 10 + 20` ]
echo "$c"
c=$[ 10 + 20 ]
echo "$c"
  1. val=$(expr 10 + 20)
a=10
b=20
c=$(($a+$b))

初学者推荐第一种写法,虽然看着复杂,但逻辑清晰,不易混淆。

猜你喜欢

转载自blog.csdn.net/qq_22613757/article/details/83933549
今日推荐