Linux shell 快速入门

本文主要介绍 Linux Shell 编程相关基础知识,可以让初学者快速入门,内容主要包含以下几个方面:

Shell 脚本概述
Shell 脚本运行与调试
Shell 如何定义变量
Shell 表达式
Shell 流程控制
Shell 函数

Shell 脚本概述

Shell 脚本是一门简单的脚本语言,主要由 Shell 基本语法 + Linux 命令 组成,所以说要写好 Shell 脚本,必须掌握好一些重要的 Linux 命令
下面是一个最简单的 Shell 脚本内容,我们可以将其保存在一个test.sh 文件中

  #!/bin/bash
  # This is a output string `https://dev4mobiles.com`
  echo "https://dev4mobiles.com"

第一行 #! 是约定标记,英文读作shell bang,后面的 /bin/bash 指定了脚本需要哪种解释器来解释, 本文使用了常用 bash 解释器。
第二行 以 # 开头的行就是注释,会被解释器忽略
第三行 功能是向命令行输出字符串,字符串一般用双引号引起来

Shell 运行与调试

Shell 脚本的执行是解释执行的,也就是说边解释边执行

运行

运行方式有两种:

  1. 作为可执行程序
  chmod u+x test.sh
  ./test.sh

首先需要给文件 test.sh 添加可执行权限,然后执行 ./test.sh 就可以得到输出结果, 其中的 . 是标识在当前目录找可行性程序 test.sh 来执行,并且使用定义的 shell bang #!/bin/bash 来执行程序

  1. 作为解释器参数来执行, 可以使用解释器 sh, 或者其它解释器 bash, 使用这样的方式来执行程序,其中指定的 shell bang 是不生效的的
  sh test.sh
  bash test.sh

作为解释器参数来执行脚本,不需要可执行性权限,所以这种方式也是使用最多的

调试

一般常用的有两个:

  1. 检查语法命令 sh -n test.sh, 没有输出,说明没有语法错误
  2. 调试命令 sh -x test.sh
    下面是执行 sh -x test.sh的结果
  + echo https://dev4mobiles.com
  https://dev4mobiles.com

第一行 带+ 表明调试器真正执行的命令,不带 + 的是我们的程序输出, 所以结果 https://dev4mobiles.com 是命令 echo "https://dev4mobiles.com" 的输出

如何定义变量

下面来看一段程序,程序表明了如何定义程序

#!/bin/bash
name='dev4mobile'
age=20
website="dev4mobiles.com, name=${name}"
money=10.2
echo $name $age $website $money
echo "$name $age"
arr=(1 2 3)
echo "${arr[@]}"

程序说明:
第一行:指定了解释器为 /bain/bash
第二行:定义一个变量为 name,值为一个用单引号引起来的字符串
第三行:定义一个整形变量 age, 值为 20
第四行:定义一个用双引号引起来的字符串website, 双引号里面的字符串可以通过${} 的方式引用其它变量,这里引用了 name 字段,
但是像第一行用单引号定义的字符串里面不可以引用其它字符串,所以双引号可以拼接字符串
第五行:定义了一个浮点数
第六行:使用 echo 输出多个变量, 变量以空格分开
第七行:输出用双引号拼接的多个字符串
第八行:定义一个名为 arr 的数组
第九行:输出数组

执行 bash test.sh, 将会输出结果

dev4mobile 20 dev4mobiles.com, name=dev4mobile 10.2
dev4mobile 20
1 2 3

变量分为自定义变量环境变量,上面的程序就是自定义变量,还有一种环境变量,是系统已经定义好的,我们直接拿来使用就行了

#!/bin/bash
echo "\$PWD=$PWD"
echo "\$TERM=$TERM"
echo "\$HOME=$HOME"
echo "\$PATH=$PATH"

为了不让${} 解析成变量, 我使用 \ 进行转义

Output:

$PWD=/home/dev4mobile/data
$TERM=xterm-256color
$HOME=/home/dev4mobile
$PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Shell 表达式

#复制表达式
var=5
#表达式计算
expr $var + 5 
#测试 var 是否与 5 相等
test $var -eq 5 
#测试 var 变量 是否与 5 相等的另外一种写法
[ $var -eq 5 ], 记住[] 里面的内容必须以空格开始,空格结束
#测试develop文件是否为目录
test -d ./develop

注意上面的脚本不能直接拷贝来运行,需要配合其它表达式来执行

Shell 流程控制

  • if 流程

    #!/bin/bash
    read Name
    if test "$Name" = "dev4mobile";then
      echo "true"
    else
      echo "false"
    fi
    

    执行 bash test.sh
    注意:字符串相等使用 =且等号左右两边必须包含空格, 不然的话,解释执行会报错

  • case 语句

#!/bin/bash
read Animal
case $Animal in
  "pig")
     echo "pig"
     ;;
  "beef")
     echo "beef"
     ;;
   *)
     echo "default"
   ;;
esac
  • for 循环
    两种写法
    第一种写法
#!/bin/bash
for((var=1; var<10; var++));do
  echo $var
done

第二种写法

#!/bin/bash
for var in `ls -al`;do
  echo $var
done

其中 `ls -al` 是执行 ls -al 命令

  • while 循环
#!/bin/bash
read NUM
while [ $NUM -lt 10 ]; do
  echo $NUM
  NUM=$(($NUM+1))
done

条件放在用[] 中,注意里面的条件必须左右都有空格,不然解析会报错,另外 $(()) 里面存放的是算术表达式

  • until
#!/bin/bash
set -e
Num=0
until [ $Num -gt 5 ];do
  echo $Num
  Num=$[Num+1]
done

条件跟while一样,放在 [] 里面,另外除了可以使用 $(()),也可以使用 $[] 里面使用算术表达式

  • break
#!/bin/bash
for num in 1 2 3;do
  if test $num -gt 2;then
    break
  fi
  echo $num
done
  • contine
#!/bin/bash
for num in 1 2 3;do
  if test $num -eq 2;then
    continue
  fi
  echo $num
done

Shell 函数

定义函数有格式

[function] fun_name() {
  [return xxx]
}

其中[] 中的内容是可以省略的

#!/bin/bash

#定义函数
function print(){
  echo "https://dev4mobiles.com"
}
#调用函数
print
#定义带参数的函数
say(){
 echo $1 $2
 #只能返回数字且范围为0~255
 return 2
}
say 1 2
# 得到函数的返回值
echo $?

⚠️不能在函数 () 定义参数, 方法内接收参数 $1, $2 格式来接收参数
调用方法使用方法名后跟参数
只能立刻使用 $? 来得到结果,其中方法返回的参数只能是0~255之间的值(很奇葩,不知道为啥设计成这样)

总结

看过上面的教程,相信差不多能够入门了,如果想了解更多,欢迎访问我的网站:https://dev4mobiles.com 下来的就是花时间多练习,相信你会成为 shell 脚本专家

你可能感兴趣的:(SHELL,shell)