shell脚本 | 变量定义 | 分支循环 | 练习

1.hello shell第一shell程序

shell用来解析命令,完成用户和内核的交互。我们可以通过shell脚本将多条命令结合起来,完成一些逻辑上的操作。通常shell脚本以.sh后缀结尾,但不是必需的。我们来完成一个输出hello shell的脚本吧。我这里使用neovim,如果没有按照用vim或者vi都是可以的。

☁  new  pwd
/home/xiyan/new
☁  new  nvim hello.sh
#! /bin/bash

echo "hello shell"

上面就是简单的输出一个"hello shell",运行sh脚本有两种方式,可以通过 bash + 脚本名,或者给脚本文件赋予可执行权限。bash是系统的一个shell,可以通过/etc/shells文件查看系统支持的shell版本。

方式1
☁  new  bash hello.sh
方式2
☁  new  chmod 744 hello.sh
☁  new  ./hello.sh
2.定义变量

shell脚本定义变量规范变量名要大写(不遵守也可以),它不用声明类型(和python定义是一样的)等号赋值时左右两边不能有空格(这就很麻烦!)。

NAME="iu"
AGE=18

如何要取出变量中的值可以使用 $符号

#! /bin/bash

NAME="iu"
AGE=18

echo "the name is $NAME"
echo "the age is $AGE"
3.输入和输出

shell脚本中可以使用echo来输出,上面也一直在用。从命令行中输入可以使用read命令带上 -p可以带提示输入。

#! /bin/bash

echo "请输入你的名字 :"
read NAME
read -p "请输入你的年龄 : " AGE

echo "the name is $NAME"
echo "the age is $AGE"
4.算术运算符

在shell脚本中,算术运算需要带上expr命令。例如:1 + 3需要 expr 3 + 1 并且运算符两边需要带上空格,在使用乘法的时候需要转义(\*),另外如果想要将结果赋值给变量就需要用 (`` 括起来 : ~这个键)。常用运算符:(+- \*/ %

#! /bin/bash

NUM1=`expr 5 + 10`
echo "$NUM1"
NUM2=`expr 5 \* 10`
echo "$NUM2"
5.条件循环语句

1、if语句,if-else语句、if else-if else语句格式多用即可,唯一要注意的是空格!

if [ 条件 ]
then
	命令
fi
-----------
if [ 条件 ]
then
    命令
else
    命令
fi
-----------
if [ 条件 ]
then
    命令
elif [ 条件 ]
then 
    命令
else
    命令
fi

1)判断用户名正不正确,假设用户名是root。

#! /bin/bash

read -p "请输入你的用户名 : " USER
if [ $USER = "root" ]
then
    echo "user : $USER-用户名正确!"
else
    echo "user : $USER-用户名错误!"
fi

2)实现输入一个整数,判断此整数是奇数还是偶数

#! /bin/bash

read -p "请输一个整数 : " NUM
if [ `expr $NUM % 2` -eq 0 ]
then
    echo "这是一个偶数 : $NUM "
else
    echo "这是一个奇数 : $NUM "
fi

对于字符串可以通过 == 或者 = 来判断是否相等。而数字做比较,有点难记。equals是等于、not是不、little 是小、而great是大,将它们组合起来。

-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

3)提示输入一个目录文件名,判断是否存在,如果不存在创建,存在不创建。判断目录是否有写权限,如果有写权限,进入目录。进入目录后,提示输入要创建普通文件名字,判断普通文件是否存在,存在,不创建,不存在创建

-e 判断文件是否存在 不区分文件的类型 目录 普通文件
-d 判断目录文件是否存在
-f 判断普通文件是否存在
-r 判断文件是否有读权限
-w 判断文件是否有写权限
-x 判断文件是否有可执行权限
#! /bin/bash

read -p "请输入一个目录名:" DIR
if [ -d $DIR ]
then
    echo "文件名为$DIR的目录已存在!"
else
    mkdir $DIR
    echo "已创建名为$DIR的目录!"
fi

if [ -w $DIR ]
then
    cd $DIR
    read -p "请输出要创建存在的文件名:" FILE

    if [ -f $FILE ]
    then
        echo "要创建名为$FILE的普通文件已存在!"
    else
        touch $FILE
        echo "已创建名为$FILE的文件!"
    fi
else
    echo "你没有$DIR的写权限!"
fi

2、while循环的基本语法。

while [ 条件 ]
do
    命令
done

1)实现1-100的求和。

#! /bin/bash

NUM=1
SUM=0

while [ $NUM -le 100 ]
do
    SUM=`expr $SUM + $NUM`
    NUM=`expr $NUM + 1`
done

echo "$SUM"

3、for循环的基本语法

for var in 列表
do
	命令
done

1)输出1-10,这里关键的一点是定义一个列表。用一对 "1 2 3 4 5"中间用空格隔开。

#! /bin/bash

LIST="1 2 3 4 5 6 7 8 9 10"

for E in $LIST
do
    echo $E
done

2)for循环实现将a文件夹中的所有文件copy到b文件夹中。如果这里要实现这个题目,首先要知道 # 、1 、2代表什么意思。# 代表系统要输入多少个参数。1表示第一个参数、而2表示第二参数。

☁  new  tree
.
├── a
│   ├── a.tx
│   ├── a.txt
│   └── c
└── hello.sh

#! /bin/bash

if [ $# -ne 2 ]
then
    echo "你的命令错误,用法:命令 参数1 参数2"
    exit
fi

if [ -d $1 ]
then
    if [ -d $2 ]
    then
        echo "$2已存在!"
    else
        mkdir $2
        echo "$2创建成功!"
    fi

    LIST=`ls $1`

    for E in $LIST
    do
        cp -r $1/$E $2
    done
else
    echo "你输入的$1不存在!"
fi
☁  new  bash hello.sh a b
b创建成功!
☁  new  tree
.
├── a
│   ├── a.tx
│   ├── a.txt
│   └── c
├── b
│   ├── a.tx
│   ├── a.txt
│   └── c
└── hello.sh

4、case … esac基本语法

casein
模式1)
   	执行命令
    ;;
模式2)
    执行命令
    ;;
模式*)
    上面分支都不满足时执行的命令
    ;;  
esac

1)使用case … esac实现一个简单的计算器

#! /bin/bash

read -p "请输入第一个整数: " NUM1
read -p "请输入一个运算符: " OP
read -p "请输入第二个整数: " NUM2

case "$OP" in
    +)
        echo "$NUM1 + $NUM2 = `expr $NUM1 + $NUM2`"
        ;;
    -)
        echo "$NUM1 - $NUM2 = `expr $NUM1 - $NUM2`"
        ;;
    \*)
        echo "$NUM1 * $NUM2 = `expr $NUM1 \* $NUM2`"
        ;;
    /)
        echo "$NUM1 / $NUM2 = `expr $NUM1 / $NUM2`"
        ;;
    *)
        echo "你输入的运算符有误!"
        ;;
esac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值