shell简介基础(一)
admin
2023-07-27 07:20:06
0

        我们在嵌入式的开发中,难免会要用到脚本。常用的也就是 makefile 和 shell 脚本了,之前我们学习了 makefile 相关的知识,接下来我们也将要学习 shell 相关的知识,以便在以后的嵌入式开发中能更快、更高效的完成任务。学习于果子玩转 Linux 下 SHELL 编程

        那么什么是 shell 呢?shell 是结余用户与系统之间,帮助用户与系统进行沟通的工具。关系如下图

shell简介基础(一)

        那么除了文字模式的 shell 外,GNOME、KDE 这类图形界面也属于 shell 的范畴。我们通常提到的 shell 都指的是狭义上的 shell,即文字模式的 shell。一般来说,shell 可以分成两类。第一类是由 Bourneshell 衍生出来的包括 sh,ksh,bash 与 zsh;第二类是由 CShell 衍生出来的,包括 csh 与 tcsh。除此之外,还有一个 rc。

        那么我们为什么要来学习 shell 呢?其主要原因可以总结为以下三点:

        1、图形用户界面只是一个程序套件,文字模式的 shell 功能和能执行的任务则比图形界面要强的多;

        2、shell 是文字模式,因此远程登录和传输的速度比图形界面更快;

        3、shell 使用起来更方便。


        Linux 下的支持的 shell 有好多种,我们学习的就是最常用的 bash shell。现在主要的 Linux 发行版都是用 bash 作为默认的管理 shell。下来我们就来说说如何编写一个简单的 bash shell。

        1、使用任何的文本编辑工具进行编写,如:vim

            #!/bin/bash  #放置在文件的开头

        2、设置脚本执行权限

            chmod a+x filename

            chmod 700 filename

        3、执行脚本

            bash your_script.sh

            sh your_script.sh

            ./your_script.sh


test.sh 源码

#!/bin/bash
echo "hello world!"

        运行结果如下

shell简介基础(一)

        我们看到在执行的时候,它说没有权限,然后我们执行上面的第二步。再来看看

shell简介基础(一)

        我们已经成功地用 shell 输出了经典的 hello world。那么上面的那句 #!/bin/bash 是什么意思呢?它的意思是用 bin 目录下的 bash 脚本解释器来对其进行解释。

        下来我们来看看 shell 中的变量。在 shell 中,变量分为系统环境变量和 UDV (user defined variable)变量。系统环境变量是系统本身所有,通常为大写字母,系统变量是通过 set 或 declare 指令进行查看;而 UDV 变量则是由用户创建和为维护的,我们建议定义其时进行大写的定义。那么这时为什么呢?因为 Linux 系统的命令全部采用的是小写方式,我们应避免冲突与混淆。

        那么 shell 中所有变量定义都是字符串;应区分变量的大小写,如:var 和 Var 是两个不同的变量;变量必须以字母或下划线开头,不得有“,”;‘:’;“\”等特殊字符。

        下来我们来进行下实验

shell简介基础(一)

        我们看到在 set | grep PATH 后出现了 PATH 相关的定义。在进行变量的定义时加 , 或者 \ 的时候,都出现了错误。下来我们来讲讲变量的声明和定义,变量的定义如我们上面所操作的那样,直接是 变量名=值(变量名与值之间的“=”号没有空格);如果我们需要声明带有空格的变量,那么我们就必须像定义字符串一样加上 “” 才行。如果我们需要声明一个只读变量,那么在定义的前面需要加上 readonly;修改环境变量,如PATH=$PATH:/class/bin ,修改用户自定义变量时,如:DIR="hello"。

        我们想要使用变量的话,应在变量前面加 “$”符号,在上面的示例中也展示了。echo $DIR 或 echo ${DIR}。那么上面两种用法有何区别呢?我们为何要在 shell 中使用变量,又为何要添加界定符 {} 呢?

        下来我们还是以实验为例来进行讲解:第一种写法:

#!/bin/bash
echo "/home/aston/test"

        我们来看看执行后的结果

shell简介基础(一)

        我们再来看看第二种写法

#!/bin/bash
PWD="/home/aston/test"

echo $PWD

shell简介基础(一)

        我们看到效果是一样的,但是第二种看起来就非常的简洁明了,所以我们在 shell 中定义变量是为了提高代码的可读性。下来我们来看看界定符的作用。在有的版本中,界定符是为了保证我们如果在一个环境变量后面追加东西时,它会直接写到这个环境变量的路径后面。在有的版本中,这个好像没什么作用了。不过我们尽量还是加上界定符,以保证最大的正确率。

相关内容

热门资讯

浙江宣传:“走个面儿”咋就没面... “咱北京两千多万人口,您受累,您走个面儿,把这第一波的票房带起来,咱就有了。”某知名导演的新片首映礼...
辞职声明仅95秒遭质疑,韩国队... 【环球时报综合报道】美加墨世界杯小组赛出局后,韩国队主教练洪明甫当地时间28日在墨西哥的韩国队大本营...
美媒爆料:美军第五舰队总部遭伊... 据美国《华尔街日报》27日报道,其通过对卫星图像、社交媒体视频和五角大楼记录的分析发现,今年2月底至...
英国智库给菲律宾GDP增速“浇... 【环球时报特约记者 叶满】英国经济研究机构凯投宏观发布的最新一期《亚洲经济展望》报告(以下简称“报告...
欧洲持续高温,有华人用冰箱降温... 连日来,欧洲多国迎来罕见极端高温天气,法国、德国、意大利等地气温持续飙升,部分地区突破40摄氏度。受...
伊副外长强调船只须按“伊朗线路... 伊朗外交部副部长加里巴巴迪当地时间29日晚间在接受采访时强调,所有船只均须按照“伊朗线路”通过霍尔木...
委内瑞拉强震已致1719人死亡 当地时间29日,委内瑞拉全国代表大会主席罗德里格斯通报,地震已造成该国1719人死亡,5034人受伤...
铋晟新材料申请氯氧化铋基复合材... 国家知识产权局信息显示,江苏铋晟新材料有限公司申请一项名为“一种氯氧化铋基复合材料及其制备方法和用途...
韩国政府将投资千万亿韩元于AI... 韩国总统李在明29日在总统府青瓦台主持召开会议,公布总额超千万亿韩元的半导体、物理人工智能(AI)和...
以色列防长称以伊可能随时再起冲... △卡茨(资料图)据以色列方面29日消息,以国防部长卡茨当天表示,鉴于复杂的安全局势和在黎巴嫩的军事行...