返回
Featured image of post 基础Shell Script

基础Shell Script

Shell Script

shell脚本

指定解析器

#!/bin/zsh

打印文本

echo "hello world!"

常用系统变量

$HOME
$PWD
$SHELL
$USER

定义变量

基本语法

  1. 变量=值

    等号两边没有空格

  2. 撤销命令 unset

  3. 声明静态变量

    readonly 变量=值

  4. 在bash里,变量默认类型都是字符串类型,无法直接进行数值运算

    $ A=1+1
    $ echo $A
    
  5. 变量的值如果有空格,需要使用双引号或单引号括起来

  6. 使用export将变量提升为全局变量(只对于当前shell),可供其他shell程序使用

    shell文件中变量生命周期只在该文件中

特殊变量

$n

n为数字,访问脚本参数(10以上要用括号包含,如${10})

$#

$# (功能描述:获取所有输入参数个数,常用于循环)。

$?

$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

$*$@

$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

运算符

  1. $((运算式))$[运算式]

  2. expr + , - , \*, /, % 加,减,乘,除,取余

注意:expr运算符间要有空格

$ expr 1 + 2
# (4+2)/2
$ expr `expr 4 + 2` / 2
$ echo $[(4+2)/2]
$ echo $(((4+2)/2))

条件判断

基本语法

[ condition ]注意condition前后要有空格

注意:条件非空即为true,[ atguigu ]返回true,[] 返回false。

常用判断条件

  1. 两个整数之间比较

= 字符串比较

-lt 小于(less than)

-le 小于等于(less equal)

-eq 等于(equal)

-gt 大于(greater than)1 2 3 1 2 3

-ge 大于等于(greater equal)

-ne 不等于(Not equal)

  1. 按照文件权限进行判断

-r 有读的权限(read)

-w 有写的权限(write)

-x有执行的权限(execute)

  1. 按照文件类型进行判断

-f 文件存在并且是一个常规的文件(file)

-e 文件存在(existence)

-d 文件存在并是一个目录(directory)

$ [ 1 = 1 ]
$ [ 1 -le 2]
$ [ -w hello.sh ]
$ [ 1 = 1 ] && [ 1 -le 2] && [ -w hello.sh ]
$ [ 1 = 1 ] || [ 1 -le 2] || [ -w hello.sh ]

流程控制

if

if [ condition ];then
	...
fi

if [ condition ]
	then
	...
fi

if [ $1 -eq 1 ];then
    echo "is 1"
else if [ $1 -eq 2 ];then
    echo "is 2"
else
    echo "not 1 and 2"
fi
fi

case

#!/bin/zsh

case $1 in
1) 
    echo "1"
    ;;s=0
for ((i=1;i<=10;i++))
do
  s=$[$s+$i]
  echo $s
done
2)
    echo "2"
    ;;
*)
    echo $1
    ;;
esac

for

s=0
for ((i=1;i<=10;i++))
do
  s=$[$s+$i]
  echo $s
done
for i in "$*"
do
    echo $i
done


for j in "$@"
do
    echo $j
done

# 1 2 3
# 1
# 2
# 3

while

#!/bin/zsh

s=0
i=1
while [ $i -le 10 ]
do
  s=$[$s+$i]
  i=$[$i+1]
done

echo $s

read读取控制台输入

read(选项)(参数)

选项:

  • -p:指定读取值时的提示符;

  • -t:指定读取值时等待的时间(秒)。

参数:

  • 变量:指定读取值的变量名
read -t 10 -p $'input something in 10 sec\x0a' THING
echo $THING

函数

function sum()
{
    s=0
    s=$[ $1 + $2 ]
    echo "$s"
}

read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。

函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)