技术标签: shell 获取家目录 springboot执行shell脚本 csh shell shell 读取命令行
私信我或关注微信号:狮范儿,回复:学习,获取免费学习资源包。
Shell是种命令解释程序,也可以看作是一种命令语言的解释器。
用户在与Shell交互时所输入的命令行必须符合Shell命令的语法和语义规范,才能够被Shell理解并执行。
Shell所使用的这种命令语言称为Shell 语言。Shell语言不仅仅是一种交互式语言, 它还是一种可编程的程序设计语言。将若干个Shell命令行写入个文件就构成了一个Shell程序,它可以被Shell逐条地解释执行。
用Shell语言编写的Shell程序可以使用各种变量、参数和控制结构来组织命令流程,自动化地完成各种复杂冗繁的处理工作。
Linux系统中广泛使用了Shell程序来实现系统的初启、配置、管理和维护等工作。因此,熟练掌握Shell语言可以更加深入地理解系统的运行机制,更加有效地使用和管理系统。
Shell 语言的特点
与其他编程语言相比,Shell 语言具有如下特点:
(1) Shell是一种解释性语言。
这就是说,用Shell语言写的程序不需编译,可以直接由Shell进程解释执行。解释性语言的特点是快捷方便,可以即编即用,但与编译性语言的目标程序来比,解释性语言程序的运行速度要低一些。
(2) Shell 是基于字符串的语言。
Shell 只是做字符串处理,不支持复杂的数据结构和运算。Shell 的输出也全部是字符方式的。
(3) Shell是命令级语言。
Shell 程序全部由命令而不是语句组成,几乎所有的Shell命令和可执行程序都可用来编写Shell程序。Shell命令十分丰富,命令的组合功能也十分强大。所以,用简单的命令和命令组合形成的Shell程序即简洁又高效,可以实现各种复杂的功能。另外需要说明的是,不同版本的Shell程序不完全兼容,差别可能是细微的,也可能是明显的。
Shell 程序
Shell程序也称Shell脚本(script),是由一系列 Shell命令为基本元素构成的文本文件。简单的Shell程序可以只是一个命令序列,高级Shell程序中还可以包含复杂的命令组合,定义各种参数和变量、使用条件命令、控制结构以及其他高级特性。
Shell程序的建立与执行Shell脚本文是文本文件,因此可以用任何文本编辑器(如vi, emacs等)建立和编辑脚本。Shell脚本文件的名称没有限定的拓展名,通常不带拓展名或者带“.sh”拓展名。 Shell脚本的执行方式主要有3种。
1. $ chmod a+x hello 2. $ ./hello
(1)将脚本作为可执行文件执行:
用文本编辑器生成的脚本文件默认是没有x权限的,也就是说是不可直接执行的。赋予x权限后,脚本就可以像一般的 Shell命令那样执行了。如果脚本不在系统存放命令的标准目录下,需要在执行时指定脚本的路径。上例中脚本hllo放在当前目录下,所以要用.hello来运行。
(2)启动一一个Shell子进程来执行脚本文件:
1. $ bash hello #或bash < hello
执行此命令行时,Shell 进程先启动一个bash子进程,让它执行hello脚本的内容,执行完毕后bash子进程也终止。在这种方式中,脚本是作为命令参数传给子Shell 的。子Shell运行时读取该文件并执行其内容,因此脚本文件不必有执行权限。这种方法常用于运行一个其他版本的Sbell脚本。假如当前Shell是bash,而chello是用C Shell语言写的脚本,则要执行这个脚本时可以用csh chello命令启动一个csh进程来执行它。
(3)让当前Shell进程执行脚本文件:
1. $.hello
“.”是一个shell内部命令,hello是它的参数。命令的功能是读取参数指定的文件,执行其内容。这种执行方式与第2种方式类似,区别在于此方式是由当前Shell进程来执行脚本文件的。
如何学好 Shell?
前面大致简介了一下什么是Shell脚本,它有什么特点,做什么用的,想必现在大家对这个有了一定程度的了解,当然这只是学习Linux操作系统中所接触到的冰山一角,想要学好Linux操作系统,就必须学好Shell,那怎么样才能学好Shell呢?我们先看一个简单的Shell程序:
1. $ cat hello # hello program 2. # this is a shell script to say hello 3. echo Hello World! 4. echo -n “Today is” 5. date “+%A,%B %d,%Y.” 6. $.hello # run 7. Hello World! 8. Today is Sunday, July 15, 2018. 9. $_
这个hello程序的第二行是注释,后面3行是命令,在执行程序时,shell依次执行这3个命令,并输出显示信息。这就是一个简单的hello world代码,几乎所有的程序员学习如何编写代码都是从这里起家的。
学习linux运维,这是必经之路,不管是自学呢,还是参加培训,不过在我看来,学习技术还是的有一个完整的体系,不管你学不学,资料就在哪里不断增多;不管你学不学习,时间就那么多,逐渐流逝!
来源网络侵权联系删除
python开发中有时候需要遍历某对象的属性list:class Person(object): """ 职员信息 """ name = 0 age = 1 id = 2 group = 3attr = [a for a in dir(Person) if not a.startswith('__')]for a in attr: print(a, getattr(Person, a))"""age 1group 3id_python 遍历对象属性
题目Named Entity Recognition as Dependency ParsingYu, J., Bohnet, B., & Poesio, M. (2020). Named Entity Recognition as Dependency Parsing. ArXiv, abs/2005.07150.代码:https://github.com/juntaoy/biaffine-ner作者Juntao YuQueen Mary University London, UK 伦_biaffine
世界这么大,只有四天假.今天拐回头再看假期前写的两列瀑布流,发现了一个严重的问题.虽然我用了window.onload方法,但是具体问题还是要具体对待.window.onload适用于结构中已经存在的DOM元素,针对于元素中已有的需要加载异步数据(img中的src,或script中的src、css文件)时起作用,但对于我这次动态生成的img元素而形成的移动端瀑布流,反倒不起作用了...._移动端 两列 瀑布流
搭建SpringMVC框架、@Controller、@RequestMapping("/")、@Autowired、@ResponseBody四大注解的应用,以及用ajax实现省份与城市下拉类表的级联操作
一、准备工作安装好Ubuntu 20.04操作系统。版本:Linux(Xubuntu发行版)虚拟机https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/xubuntu/releases/20.04/release/xubuntu-20.04.4-desktop-amd64.iso二、Linux操作系统平台使用【实验目的】1、了解Linux系统文件系统的基本组织2、了解Linux基本的多用户权限系统3、熟练使用ls、cd、c_计算机串口使用与测量实验
springboot redis zset test demopackage net.yanlp.mid.ch.test;import lombok.extern.slf4j.Slf4j;import net.yanlp.mid.ch.MidCh;import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.springframework.beans.factory._stringredistemplate zset
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理本文章来自腾讯云 作者:Python进阶者想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。点击查看1 前言嘿,各位小伙伴,晚上好呀,我相信各位小伙伴都是python的爱好者。也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加_打包成exe会做哪些事
我的计算代码部分:#基本上有用的计算部分我都存下来了,用matlab写计算就写了一千多行,简直就是累到心死,但是真的成长还是挺快的,以下就是基本上所有的代码了。%17个站点的三样检测因素的平均值c=[9.1543 8.9304 8.5054 8.6832 7.7536 7.4554 7.4911 5.5586 8.9761 6.8650 ..._数学建模水质的评价和预测
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。 .NET框架提供了两种串行化的方式:1、是使用BinaryFormatter进行串行化;2、使用SoapForm_winfrom serialize
1。在程序中展示自己的技术。程序是用来解决问题的,在能够解决问题的基础上,程序越简单就意味着越好的可维护性。2。不仔细验证自己的程序。看起来很骄傲很理直气壮的说,那是测试人员的事。大错特错,等待别人给自己找错误,是把自己的责任推给别人,不要以为你是个思想家。3。忽视业务和需求。一个程序的价值要看它在整个生命周期内所耗费的成本相对于它所起的作用,可维护性,可扩展性,可伸缩性,鲁棒性,安全性,_程序员项目出现生产故障如何道歉
1.相比synchronized,ReentrantLock(重入锁)增加了一些高级功能等待可中断——对于synchronized,如果一个线程正在等待锁,那么结果只有两种情况,要么获得这把锁继续执行 ,要么就保持等待。而使用ReentrantLock,如果一个线程正在等待锁,那么它依然可以收到通知,被告知无需再等待,可以停止工作了。注意:这里说的是一个线程正在等待锁即没有获得锁,而不是说获得锁后...
网址:aHR0cHM6Ly93d3cuaXFpeWkuY29tLw==一、整体流程分析爱qiyi整个登录滑块流程主要分五步:1、访问dfp_pcw/sign拿到dfp参数2、访问login.action拿到token参数3、访问sbox_init_key拿到sig,sid,sr参数4、访问verifycenter/initpage拿到滑块相关数据(包括图片的地址以及还原图片的数组)5、访问verifycenter/verify,然后"msg":"成功"即通过滑块二、根据每个包需要的参数逐