Shell语法

echo输出

# 输出
hy@ubuntu:~$ echo hello
hello
# 输出多行
hy@ubuntu:~$ echo "hello
> world"
hello
world
# -e 解释转义字符
hy@ubuntu:~$ echo "hello\nworld"
hello\nworld
hy@ubuntu:~$ echo -e "hello\nworld"
hello
world
# 当命令较长时,可以用`/`将参数多行输出
hy@ubuntu:~$ echo hello \
> world
hello world
# `/`转义特殊变量(&,$,*)
hy@ubuntu:~$ echo $100
00
hy@ubuntu:~$ echo \$100
$100

变量

环境变量

# 显示所有环境变量
env

自定义变量

只有当前shell有效

# 创建变量
hy@ubuntu:~$ a=123
hy@ubuntu:~$ b="hello shell"
hy@ubuntu:~$ echo a
a

# 读取变量
hy@ubuntu:~$ echo $a
123
hy@ubuntu:~$ echo $b
hello shell
# 未命名的变量默认为null
hy@ubuntu:~$ echo $c

hy@ubuntu:~$

export输出变量

用户创建的变量仅可用于当前 Shell,子 Shell 默认读取不到父 Shell 定义的变量。为了把变量传递给子 Shell,需要使用export命令。且子shell不会影响到夫shell

hy@ubuntu:~$ name=huyuan
hy@ubuntu:~$ echo $name
huyuan
# 进入子shell
hy@ubuntu:~$ bash
# 继承父shell的变量
hy@ubuntu:~$ echo $name
huyuan
# 修改变量
hy@ubuntu:~$ name=wangyi
hy@ubuntu:~$ echo $name
wangyi
# 退出子shell,不会影响夫shell
hy@ubuntu:~$ exit
exit
hy@ubuntu:~$ echo $name
huyuan

算数操作

# (()) 算数操作
# 整数的运算
hy@ubuntu:~$ foo=$((5+2))
hy@ubuntu:~$ echo $foo
7
hy@ubuntu:~$ echo $((5/2))
2
hy@ubuntu:~$ echo $((foo+2))
9
# 位运算
hy@ubuntu:~$ echo $((foo>>2))
1
# 逻辑运算
hy@ubuntu:~$ echo $((1>=2))
0
hy@ubuntu:~$ echo $((foo==7))
1

if结构

#!/bin/bash

echo "please input a value"
read value
if [ $value == "1" ]; then
    echo "1"
elif [ $value == "2" ]; then
    echo "2"
else
    echo "text is other"
fi

while循环

#!/bin/bash

n=1
while [ $n -le 10 ]
do
    echo $n
    let n++
done

函数

#!/bin/bash

fn() {
    echo "name:" $1
    echo "age:" $2
}

fn huyuan 20

结果

hy@ubuntu:~$ ./3.sh 
name: huyuan
age: 20

数组

#!/bin/bash

arr=(1 a)

echo ${arr[0]}
echo ${arr[1]}

shell脚本

脚本开头

#!/bin/bash

脚本参数

script.sh w1 w2

$0:脚本参数名,即script.sh
$1-$9:对应脚本后面的参数,即w1,w2.. 

getopts解析命令行参数

#!/bin/sh
while getopts ab: OPTION;do
    case $OPTION in
        a)
            echo "get option a"
        ;;
        b)
            echo "get option b and parameter is $OPTARG"
        ;;
        ?)
            echo "get a non option $OPTARG and OPTION is $OPTION"
        ;;
    esac
done

运行

hy@ubuntu:~$ ./1.sh -a -b huyuan
get option a
get option b and parameter is huyuan
hy@ubuntu:~$ ./1.sh -c
Illegal option -c
get a non option  and OPTION is ?

read读取用户输入

#!/bin/bash

echo "please input >>"
read text
echo "you input $text"

结果

please input >>
hello
you input hello
posted @ 2020-10-14 11:29  lovy11111  阅读(159)  评论(0)    收藏  举报