我们在嵌入式的开发中,难免会要用到脚本。常用的也就是 makefile 和 shell 脚本了,之前我们学习了 makefile 相关的知识,接下来我们也将要学习 shell 相关的知识,以便在以后的嵌入式开发中能更快、更高效的完成任务。学习于果子玩转 Linux 下 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 输出了经典的 hello world。那么上面的那句 #!/bin/bash 是什么意思呢?它的意思是用 bin 目录下的 bash 脚本解释器来对其进行解释。
下来我们来看看 shell 中的变量。在 shell 中,变量分为系统环境变量和 UDV (user defined variable)变量。系统环境变量是系统本身所有,通常为大写字母,系统变量是通过 set 或 declare 指令进行查看;而 UDV 变量则是由用户创建和为维护的,我们建议定义其时进行大写的定义。那么这时为什么呢?因为 Linux 系统的命令全部采用的是小写方式,我们应避免冲突与混淆。
那么 shell 中所有变量定义都是字符串;应区分变量的大小写,如:var 和 Var 是两个不同的变量;变量必须以字母或下划线开头,不得有“,”;‘:’;“\”等特殊字符。
下来我们来进行下实验
我们看到在 set | grep PATH 后出现了 PATH 相关的定义。在进行变量的定义时加 , 或者 \ 的时候,都出现了错误。下来我们来讲讲变量的声明和定义,变量的定义如我们上面所操作的那样,直接是 变量名=值(变量名与值之间的“=”号没有空格);如果我们需要声明带有空格的变量,那么我们就必须像定义字符串一样加上 “” 才行。如果我们需要声明一个只读变量,那么在定义的前面需要加上 readonly;修改环境变量,如PATH=$PATH:/class/bin ,修改用户自定义变量时,如:DIR="hello"。
我们想要使用变量的话,应在变量前面加 “$”符号,在上面的示例中也展示了。echo $DIR 或 echo ${DIR}。那么上面两种用法有何区别呢?我们为何要在 shell 中使用变量,又为何要添加界定符 {} 呢?
下来我们还是以实验为例来进行讲解:第一种写法:
#!/bin/bash echo "/home/aston/test"
我们来看看执行后的结果
我们再来看看第二种写法
#!/bin/bash PWD="/home/aston/test" echo $PWD
我们看到效果是一样的,但是第二种看起来就非常的简洁明了,所以我们在 shell 中定义变量是为了提高代码的可读性。下来我们来看看界定符的作用。在有的版本中,界定符是为了保证我们如果在一个环境变量后面追加东西时,它会直接写到这个环境变量的路径后面。在有的版本中,这个好像没什么作用了。不过我们尽量还是加上界定符,以保证最大的正确率。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。