专栏首页浩Coding小白Linux入门--入门篇(二):Linux下的shell编程入门

小白Linux入门--入门篇(二):Linux下的shell编程入门

我们在Linux下编程,不可避免的会用到shell编程,编写一些简单的shell脚本可以实现很多使用的功能,比如我们微信公众号需要用到的开机tomcat和ngrok自启动,连接服务器可以用到ssh免密连接等等,本想自己写一写shell入门教程,一看网上有大神写的很详细,就直接用网上的了,改成自己喜欢的,并且更加的适合小白入手,今天废话很多,下面上教程.

目录

  • 1 认识shell变量
  • 2 shell中$的意思
  • 3 shell中如何执行命令
  • 4 read读取键盘输入值
  • 5 if语句(两种)
    • (一)第一种if(用来判断条件是否正确)
    • (二)第二种if(用来判断文件或者文件夹是否存在)
  • 6 while循环
  • 7 case分支语句
  • 8 for循环
  • 9 exit语句
  • 10 函数
  • 总结demo

看着有10条,其实有点C语言编程基础的,五分钟就看完了昂!

正文

在linux系统中,我们一般都是用C语言写服务端程序,但是一般我们不直接启动这个程序,而是通过一个shell脚本启动和关闭(需要设置一些环境变量和防止打开多个该程序,打开多个后需要找到pid才能关闭)

那么shell是什么呢?

说白了shell是操作系统提供给我们的一种语言,用来将用户的命令输送到内核中执行.

shell编程

1首先我新建一个test2.sh,存放下面的一段shell代码.(用不用.sh后缀都可以,代码中#! /bin/sh可以识别出来)

2保存后,修改这个shell为可执行文件 chmod +x test2.sh 赋予文件可执行权限

#! /bin/sh

#定义变量
name=浩Conding微信公众号
echo $name

echo "所有参数列表:$*"

echo "参数的个数:$#"

输出结果:

其中./test1.sh 参数1 参数2 : ./是运行程序 后面可跟参数

下面分别介绍字段的含义

第一行:一般默认第一行都是上面这段#! /bin/sh,通知系统用/bin/sh来执行下面的程序。

以“#”开头的行代表注释

echo代表输出后面一段话的到用户界面

$name代表使用了name这个变量(定义shell变量在下面介绍)

$* 代表所有的参数(我们在shell命令后面加了参数1 和参数2两个参数)

$#代表参数的个数

有了初步的认识,我们就开始踏入shell编程吧!

1shell变量

定义shell变量:(注意等号左边右边不可以有空格)

shellname=value

使用shell变量

$shellname


2$数字

代表第几个参数

例如$1代表第一个参数,按照上面的代码就是hello

还有下面的一些$符号的使用。

可能会对$?有一点费解,例如我们在shell中调用了一个C语言程序mydemo,其中demo这个主函数会返回100(demo代码:echo 100)

#! /bin/sh./demo

echo "demo的输出参数为:$?"

echo "本程序输入的第二个参数为:$2"

注:$1和${1}一样的

例如./test.sh start stop 则$0为:test.sh ${1}为start

shell输出结果:

可以看到,demo.sh的输出结果为100,但是返回值是0


3shell中执行命令

如果我们想在shell中执行一段命令,并将该命令的值存放到一个变量中,就要用到` `符号(在1数字旁边)

#! /bin/shresult=`ls`echo result=$result

ls命令显示当前文件夹下有哪些文件

输出结果:result=test.sh ...

4读取键盘

我们在运行shell的时候,可能需要我们输入一些数据,除了带参数的方式我们还可以使用read进行读

#! /bin/sh
echo "Please input:"

read a

echo "a=$a"

输出结果:

read命令读取一个输入行,直至遇到换行符。

行尾的换行符在读入时将被转换成一个空字符

如果read命令后有变量名,输入内容赋给该变量。

如果read命令后未跟变量名,读入的行将被赋值给内置变量REPLY


shell也会像高级语言支持if,while等计算

if语句(两种)

(一)第一种if(用来判断条件是否正确)

格式:(fi代表这个if结束)

if (test condition) then
 commands
else
 commands
fi
test是一个固定关键字,用来判断condition的描述是否正确(红色的都是关键字)
#! /bin/sh
if (test "start" = "${1}" ) then
       echo "start"
else
       echo "end"
fi

= 判断两个参数是否相等 两边要有空格

还有另外的形式:

if [ ! -d "/data/" ];then -->注意:if空格[空格参数空格];then

mkdir /data

else

echo "文件夹已经存在"

fi

以上程序意思:如果输入的第一个参数为"start",则输出"start"

执行结果:

参考文章:

https://www.cnblogs.com/nfcm/p/7743418.html

https://www.cnblogs.com/37yan/p/6962563.html

本文分享自微信公众号 - 浩Coding(gh_c4a2e63d2ca7),作者:浩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编程变量命名规则及编程单词缩写字典

    作为一个程序猿,在编程过程中不可避免的要对变量命名,这个时候就需要掌握几种常见的命名规则,及常用单词的缩写,故从网上整理了一篇资料,以飨读者!(✿◡‿◡) O...

    浩Coding
  • 2019Java面试宝典 -- JavaSE基础篇

    1)继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一...

    浩Coding
  • Java EE之SSM框架整合开发 -- (4) Spring AOP

    答:AOP(Aspect-Oriented Programming),即面向切面编程。

    浩Coding
  • 一步步成为linux大神——bash shell中SIGHUP和SIGTERM信号的处理

    新人最容易发生的事情就是用ssh客户端(比如xshell)登录服务器之后,用&在后台执行了命令,第二天兴致勃勃去看任务,发现已经被kill了。一开始我学到的知识...

    大神带我来搬砖
  • Kotlin —— 这次入门就不用放弃了

    声明:本文是FEELS_CHAOTIC原创,已获其授权发布,未经原作者允许请勿转载

    用户2802329
  • mongodb 可视化工具

    最近想自己搭建一个个人博客,所以学了下mongodb,mongodb是用命令行输入的,有些人可能不太习惯,我自己找了下mongodb的一些可视化工具,发现了一款...

    战神伽罗
  • 【一起学Python】爬取网易云歌词

    说在前面:这是公众号第一篇来自小伙伴的投稿。我之前挖过一个坑,说想抓取歌词以后做文本分析,后面不了了之了。刚好Ricky作为爬虫的初学者,需要小项目练手,他就把...

    不二小段
  • 搜索(6)

     题目大意是在一个nxn的方阵地图上,每一个方格都标记+号或者-号,要从A点到B点。题目要求移动路线要+-交替,问怎么移动从A到B才是最短路径?  同样...

    mathor
  • BBQ(生信基础问题24-25):GTF,GFF是什么?

      在上个BBQ的学习,我们已经进入到了转录组的相关学习,简单的了解到了它和基因组的比对上的差异。接下来在转录组的分析中,有一个文件非常重要,它就基因注释文件,...

    liu_ll
  • 《Kotin 极简教程》第10章 Kotlin与Java互操作

    在前面的章节中,我们已经学习了Kotlin的基础语法、类型系统、泛型与集合类、面向对象与函数式编程等主题,在上一章中我们还看到了Kotlin提供的轻量级并发编程...

    一个会写诗的程序员

扫码关注云+社区

领取腾讯云代金券