shell编程入门(一)

shell编程入门(一)

输出打印

先来一个最简单的吧,echo,其实就是将内容输出到控制台上而已。

#! /bin/bash
echo "法外狂徒张三"

为脚本添加执行权限,要不然是没办法执行的

ZHR:md zc$ ./test.sh
bash: ./test.sh: Permission denied
ZHR:md zc$ chmod +x test.sh
ZHR:md zc$ ./test.sh
法外狂徒张三

输出到文件

#! /bin/bash
ls>wangwu.txt

然后发现和test.sh文件同级别目录下新增了一个wangwu.txt,打开后发现里面有与脚本同级目录的所有文件名,执行多次的结果是一致的

上面的方法如果文件中已经有内容了,那就要覆盖,如果想要在文件末尾添加新内容就要使用下面的方式

#! /bin/bash
ls>>wangwu.txt

变量的引用${}

其实这个{}可以加可以不加,但是推荐加上去,因为如果你的脚本如果很复杂的话,{}可以很好的让你看出来哪里是引用的变量。

#! /bin/bash
zhangsan="法外狂徒张三"
echo ${zhangsan}

结果

ZHR:md zc$ ./test.sh
法外狂徒张三

命令的替换$()

#! /bin/bash
echo $(pwd)

结果

ZHR:md zc$ ./test.sh
/Users/zc/Desktop/md

单引号和双引号

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的

#! /bin/bash
zhangsan="法外狂徒张三"
echo 'luoxiangshuo,${zhangsan}'

使用单引号结果

ZHR:md zc$ ./test.sh
luoxiangshuo,${zhangsan}

双引号里可以有变量

#! /bin/bash
zhangsan="法外狂徒张三"
echo "luoxiangshuo,${zhangsan}"

使用双引号的结果

ZHR:md zc$ ./test.sh
luoxiangshuo,法外狂徒张三

日期

#! /bin/bash
echo $(date +%Y%m%d%H%M%S)

结果

ZHR:md zc$ ./test.sh
20210706151741

if判断

if

#! /bin/bash
if [ 0 -eq 0 ];then
    echo "hi";
fi

这里的[ 0 -eq 0 ]在下面讲,现在就将其想像成java中的if(00)中的(00)就可以

⚠️:[]后面要加上;

结果

ZHR:md zc$ ./test.sh
hi

if else

#! /bin/bash
if [ 0 -eq 1 ];then
    echo "hi";
else
    echo "no hi";
fi

结果

ZHR:md zc$ ./test.sh
no hi

if else-if else

#! /bin/bash
if [ 0 -eq 1 ];then
    echo "one";
elif [ 0 -eq 2 ];then
    echo "two";
else [ 0 -eq 0 ]
    echo "three";
fi

注意,最后一个else后面是没有then的

结果

ZHR:md zc$ ./test.sh
three

test

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,其实test分为两种,第一种是使用test命令,第二种是使用[],但是大家常用的都是[]模式,所以我们也用[],注意,[]里的表达式,必须在左括号的右侧和右括号的左侧各加一个空格,否则会报错

shell脚本中的条件测试if中的-z到-d的意思

数值测试

-eq 等于 equal

-ne 不等于 no equal

-gt 大于 great than

-ge 大于等于 great equal

-lt 小于 little then

-le 小于等于 little equal

#! /bin/bash
a=10
b=20
c=30
a_1=10
b_1=20
if [ ${a} -eq ${a_1} ];then
    echo "one";
fi
echo "======我是分割线======="
if [ ${b} -lt ${c} ];then
    echo "two";
fi
echo "======我是分割线======="
if [ ${c} -gt ${a} ];then
    echo "three";
fi
echo "======我是分割线======="
if [ ${a} -le ${a_1} ];then
    echo "four";
fi
echo "======我是分割线======="
if [ ${b} -ge ${b_1} ];then
    echo "five";
fi

结果

ZHR:md zc$ ./test.sh
one
======我是分割线=======
two
======我是分割线=======
three
======我是分割线=======
four
======我是分割线=======
five

字符串测试

= 等于则为真

!= 不相等则为真

-z 字符串 字符串的长度为零则为真 zero

-n 字符串 字符串的长度不为零则为真

#! /bin/bash
a="蔡文姬"
b="郭嘉"
c=""
d_1="郭嘉"
if [ ${b} = ${d_1} ];then
    echo "${b}=${d_1}";
fi
echo "======我是分割线======="
if [ ${b} != ${a} ];then
    echo "${b}不等于${a}";
fi
echo "======我是分割线======="
if [ -z ${c} ];then
    echo "${c}是0个字符";
fi
echo "======我是分割线======="
if [ -n ${b} ];then
    echo "${b}大于0个字符";
fi
echo "======我是分割线======="

结果

ZHR:md zc$ ./test.sh
郭嘉=郭嘉
======我是分割线=======
郭嘉不等于蔡文姬
======我是分割线=======
是0个字符
======我是分割线=======
郭嘉大于0个字符
======我是分割线=======

文件测试

-e filename 如果 filename存在,则为真

-d filename 如果 filename为目录,则为真

-f filename 如果 filename为常规文件,则为真

-s filename 如果文件长度不为0,则为真

filename1 -nt filename2 如果 filename1比 filename2新,则为真。 new than

filename1 -ot filename2 如果 filename1比 filename2旧,则为真。old than

#! /bin/bash
a=$(pwd)
b="111.txt" #是一个非空文件
c="222.txt" #是一个空文件,创建时间更晚
if [ -d ${a} ];then
    echo "${a}是一个目录";
fi
echo "======我是分割线======="
if [ -e ${a}/${b} ];then
    echo "${a}/${b}是一个文件";
fi
echo "======我是分割线======="
if [ -f ${a}/${b} ];then
    echo "${a}/${b}是一个常规文件";
fi
echo "======我是分割线======="
if [ -s ${a}/${b} ];then
    echo "${a}/${b}的长度为0";
else
    echo "${a}/${b}的长度不为0";
fi
echo "======我是分割线======="
if [ -s ${a}/${c} ];then
    echo "${a}/${c}的长度为0";
else
    echo "${a}/${c}的长度不为0";
fi
echo "======我是分割线======="
if [ ${a}/${b} -nt ${a}/${c} ];then
    echo "${a}/${b}${a}/${c}新";
else
    echo "${a}/${b}${a}/${c}老";
fi
echo "======我是分割线======="

结果

ZHR:md zc$ ./test.sh
/Users/zc/Desktop/md是一个目录
======我是分割线=======
/Users/zc/Desktop/md/111.txt是一个文件
======我是分割线=======
/Users/zc/Desktop/md/111.txt是一个常规文件
======我是分割线=======
/Users/zc/Desktop/md/111.txt的长度为0
======我是分割线=======
/Users/zc/Desktop/md/222.txt的长度不为0
======我是分割线=======
/Users/zc/Desktop/md/111.txt比/Users/zc/Desktop/md/222.txt老
======我是分割线=======

for循环

常用的是读取文件中的一条条内容

#! /bin/bash
a=$(pwd)
b="111.txt" #是一个非空文件
c=${a}/${b}
for i in $(cat ${c})
do
    echo "打印的内容为${i}"
done

结果,和文件内容一致

ZHR:md zc$ ./test.sh
打印的内容为法外狂徒张一
打印的内容为法外狂徒张二
打印的内容为法外狂徒张三
打印的内容为法外狂徒张四
打印的内容为法外狂徒张五
打印的内容为法外狂徒张六

也可以循环数字

#! /bin/bash
for i in i 1 2 3 4 5
do
    echo "打印的内容为${i}"
done

结果

ZHR:md zc$ ./test.sh
打印的内容为i
打印的内容为1
打印的内容为2
打印的内容为3
打印的内容为4
打印的内容为5

也可以循环字符串

#! /bin/bash
for i in i am hanmeimei , who are you
do
    echo "打印的内容为${i}"
done

结果

ZHR:md zc$ ./test.sh
打印的内容为i
打印的内容为am
打印的内容为hanmeimei
打印的内容为,
打印的内容为who
打印的内容为are
打印的内容为you
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值