Shell Script入门

shell入门

  • 前言
  • shell 脚本入门
    • 格式
    • hello world
    • 多命令 脚本
  • shell 脚本中的变量
    • 系统变量
    • 自定义变量
      • 语法规则
    • 全局变量
    • 特殊变量
      • $n
      • $#
      • $* 与 $@
      • 其它特殊命令
  • 运算符
    • 语法
  • 条件判断
    • 判断条件
      • 整数之间的判断
      • 根据文件权限判断
      • 根据文件类型判断
      • 多条件判断
  • 流程控制
    • if
    • case
    • for
    • while
  • read

前言

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。

注意: 本章使用命令行都是在腾讯云服务器上测试

Linux提供的shell解释器有哪些呢?
Shell Script入门_第1张图片
在日常开发中,我们经常使用的是以下两种

/bin/sh
/bin/bash

其实 sh底层使用的也是bash
Shell Script入门_第2张图片
在这里插入图片描述
linux默认使用的是 bash解析器

shell 脚本入门

格式

脚本以 #!/bin/bash 开头,作用就是指定解析器,其实 该行不写也可以,linux默认使用的就是bash,但为了提高可读性,最好写上。

hello world

创建脚本文件

touch helloworld.sh

使用vim 编辑

执行脚本

sh helloworld.sh

Shell Script入门_第3张图片
注意:如果在执行脚本文件时想省略 sh 或 bash ,脚本文件必须拥有执行权限
在这里插入图片描述
从上图可知,此时 helloworld.sh文件对于当前用户只有 可读可写的权限,并没有执行的权限

对于文件所有者添加执行的权限

chmod u+x helloworld.sh

Shell Script入门_第4张图片

多命令 脚本

需求:
进入 /usr/local 目录下
创建 t1.txt文件
向文件追加内容 “你好”

#!/bin/bash
cd /usr/local
touch t1.txt
echo "你好" >> t1.txt

shell 脚本中的变量

系统变量

名称 说明
$HOME 当前用户根路径,系统用户为/root,其它用户/home/xxx
$USER 用户名称
$PWD 当前路径
$SHELL 默认的shell解析器

自定义变量

语法规则

变量名称=值

注意: 等号两侧不能有空格

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字

使用 unset 变量名称,来撤销变量

A=SQL
echo $A
unset A

静态(只读)变量,不能unset撤销
readonly 变量名称=值

readonly B=123

注意: bash中变量默认类型都是字符串类型,无法直接进行数值加减操作

全局变量

export会把变量提升为全局变量,其它shell脚本就可以使用该变量。
语法:
export 变量名称

A=sql
export A

特殊变量

$n

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,$0 代表该脚本名称(包含文件路径),1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……十以上的参数需要使用大括号 ${10}

parametre.sh

#!/bin/bash
echo $0 $1 $2

在这里插入图片描述

$#

$# 获取所有输入参数个数,常用于循环

#!/bin/bash
echo $0 $1 $2
echo $#

在这里插入图片描述

$* 与 $@

$* 表示命令行输入的所有参数,在一个字符串内输出 “参数1 参数2 参数3 …”
$@ 和 $* 类似,也是获取所有输入参数,但是会把参数分隔开来,“参数1” “参数2”

#!/bin/bash
echo $0 $1 $2
echo $#
echo $*
echo $@

Shell Script入门_第5张图片
注意: 虽然看起来两行输出相同,但是意义不一样
上面的sql 123 表示一个字符串,字符串的内容是 sql 123,等价于 “sql 123”。
下面的sql 123表示两个字符串,“sql” 和"123"

其它特殊命令

命令 说明
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

运算符

语法

语法一: $((运算式)) 或 $[运算式]

语法二: expr 运算符
运算符包括 +,-,*,/,%,分别表示 加,减,乘,除,取余
注意: expr 运算符之间必须要有空格

#!/bin/bash

var1=`expr 1 + 2`
echo "1 + 2 = $var1"

在这里插入图片描述
执行表达式 (2+3)*4
在这里插入图片描述

`expr 2 + 3` 反引号``内的内容会被当成一个整体,用来实现(2+3)

使用语法一来计算

echo $[(2+3)*4]

在这里插入图片描述

条件判断

语法

[ 条件表达式]
注意: 条件表达式前后必须有空格; 条件非空即为true,[ 123 ] 返回true,[] 返回false

判断条件

整数之间的判断

表达式 说明
= 字符串比较
-lt 小于less than
-le 小于等于less equal
-eq 等于equal
-gt 大于greater than
-ge 大于等于greater equal
-ne 不等于not equal

根据文件权限判断

表达式 说明 示例
-r 有读的权限read [ -r add.sh ]
-w 有写的权限write
-x 有执行的权限execute

根据文件类型判断

表达式 说明
-e 文件存在existence
-f 文件存在,并且是常规文件file
-d 文件存在,并且是一个目录

多条件判断

&& 逻辑与
|| 逻辑或
用法与其它语言类似

流程控制

if

语法

if [ 条件判断 ];then
   程序
fi

或者

if [ 条件判断 ]
  then 
        程序
fi

注意: if 和 []处的空格

#!/bin/bash

if [ $1 -ge 90 ]
then
echo "优"
elif [ $1 -ge 80 ]
then
echo "良"
elif [ $1 -ge 70 ]
then
echo "中"
else
echo "差"
fi

case

语法

case $变量名 in
"值 1")
如果变量的值等于值1,则执行程序1
;;
"值 2")
如果变量的值等于值2,则执行程序2
;;
... 同理,其它分支...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

#!/bin/bash

case $1 in
"Y")
echo "选择Yes"
;;
"N")
echo "选择No"
;;
*)
echo "输入非法"
;;
esac
#!/bin/bash

case $1 in
[9][0-9] | 100)
echo "优"
;;
[8][0-9])
echo "良"
;;
[7][0-9])
echo "中"
;;
*)
echo "差"
;;
esac

for

语法1

for(( 初始值;循环控制条件;条件变化 ))
do
程序
done
#!/bin/bash

s=0
for(( i=0;i<=100;i++))
do
s=$[$s+$i]
done
echo "sum为$s"

语法2

for 变量 in item1 item2 ... itemN
do
程序
done
#!/bin/bash

s=0
for i in $*
do
 s=$[$s+$i]
done
echo "和为$s"

while

语法

while [ 条件表达式 ]
do 
程序
done

read

read可以读取控制台输入值

语法

read(选项)(参数)

选项:
    -p: 提示内容,例如: 请输入姓名
    -t: 等待时间,超过该时间还没有输入的话,就结束
参数:
    变量: 指定读取值的变量,将读取值赋值给该变量
#!/bin/bash

read -t 10 -p "请输入姓名" NAME
echo "您的姓名:$NAME"

在这里插入图片描述

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