Bash入门

Bash简介:

Bash(GNU Bourne-Again Shell)是一个为GNU计划编写的Unix shell,它是许多Linux平台默认使用的shell。

shell是一个命令解释器,是介于操作系统内核与用户之间的一个绝缘层。准确地说,它也是能力很强的计算机语言,被称为解释性语言或脚本语言。

不管学习哪种语言,我们程序猿编写的第一个程序就是:hello world,shell脚本也不例外。

vim hello.sh

这里写图片描述

运行shell脚本的方式:
sh hello.sh
bash hello.sh
或者可以给其添加可执行权限:
chmod u+x hello.sh
./hello.sh

下面来描述一个小的脚本程序(用于清除/var/log下的log文件):

vim cleanlogs.sh

/dev/null 是指内容为空

这里写图片描述

运行脚本后,就可以清除文件啦。

可是,原因是什么呢,,为什么这样就可以清除文件了呢。首先,是因为 /dev/null 是指内容为空,将空的内容写进messages和wtmp中,就会使文件的内容全部为空,这样就清空了。

入门Bash:

1. Bash中#是代表注释的意思,(如果需要用到’#’字符的话,需要转义为\#哦)#!用于解释当前脚本的解释器,这里用的是bash,所以用全路径/bin/bash。

2. 在shell脚本中是用;作为命令分隔符,一行中如果有分号,则还可以写其他命令。

我们还是以一个例子来说明吧:

这里写图片描述

这个例子是检测是否有ttt.sh这个文件,如果有的话,输出文件存在,然后将其拷贝到ttt.sh.bak中,否则输出文件不存在,然后创建一个ttt.sh的文件。最后输出文件测试完成。(这里的条件分支,后续会具体讲到哦~)

执行脚本后sh hello.sh,结果为:

这里写图片描述

3. 我们用双分号”;;”来终止case命令,相当于是C语言中的break。

这里写图片描述

运行结果为:

123

4. 关于引号,主要有双引号和单引号

双引号:对引号中的字符串中的大部分特殊字符的解释进行阻止

单引号:对引号中的字符串中的大部分特殊字符的解释进行阻止

这里写图片描述

对于双引号来说,它会将双引号中的值当做是一个变量,而对于单引号,它会看成是一个字符串

5.关于斜线,有斜线,反斜线,一般情况下,斜线(/)看做是根目录,或者是路径分隔符,注意这里,一个斜线(/)和多个斜线()是一样的。那么,反斜线(\)的作用呢,是用来转义的,也可以转义单引号和双引号的内容,这里就会将单引号和双引号区分开来而不用被解释成特殊的字符。

6. 关于反引号,“将优先执行反引号中的内容;举个例子吧:

这里写图片描述

这里,我们将先执行mkdir back,创建好back目录后,再将test.sh拷贝到back目录下。

7.关于冒号,表示空,是shell的一个内建命令,其退出码为0。和C语言中的true类似。

这里写图片描述

这样的话,结果就会是一个永无止境的死循环了。一直输出endless loop

当然,:也可以什么都不做,当做一个占位符,如下例子:

这里写图片描述

结果为:

这里写图片描述

:还有另外一个作用是用于清空文件中的内容

:> test.sh
这时,就把test.sh中的内容清空了,文件权限等并不会受影响哦

:还用来做分隔符:

echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games

8.关于问号,我们通常用在三目运算符中

9.关于$符号,我们用在变量替换中

这里写图片描述

结果为:

这里写图片描述

$还用于命令替换,

cd $(echo back)
pwd

这里写图片描述

10. 关于小括号,代表是子shell中创建的内容,所以在父脚本中不可见。如下:

这里写图片描述

结果为:

这里写图片描述

这个倒是和C语言中的作用域{ }有些类似。

11. 初始化数组,和C语言中的数组类似,只是这里是用空格将数据分隔开。

这里写图片描述

结果为:

这里写图片描述

12.关于大括号{ },在大括号中不允许有空白哦。可对于文件进行操作,其次可进行代码块的区分,也可以当做块域

这里写图片描述

13.关于中括号[ ],是条件测试的块域。之前写例子的时候也有所涉及,就不多说了。[ ]还用来表示数组的元素,例如arr[1];取元素的编号

14.尖括号>,>>,是重定向。前面也涉及到了。

test.sh > filename 重定向test.sh的输出到文件 filename 中。如果 filename 存在的话,那么将会被覆盖。

test.sh &> filename 重定向 test.sh 的 stdout(标准输出)和 stderr(标准错误)到 filename 中。

test.sh >&2 重定向 test.sh 的 stdout 到 stderr 中。

test.sh >> filename 把 test.sh 的输出追加到文件 filename 中。如果filename 不存在的话,将会被创建。

15.关于管道:|,这个之后会详细讲解

16.破折号,’-‘用于显示选项参数时经常会用到。

ls -l
if [ 5 -eq 0] then

17.波浪号:~,表示主工作目录

今天介绍的这些都是简单基本的bash的常用字符,只是一个小小的铺垫吧,之后会详细写一下bash编程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 设置分辨率 亲测可用 转载的

网上试了很多方法, 这家管用 https://blog.csdn.net/qq_35661436/article/details/72802040

线程之售票系统pthread_mutex,_lock,_unlock

先看一下这篇文章 https://blog.csdn.net/csdn_kou/article/details/81148268 四个人同时买票票,引出线程 #include "head.h" int ticket 100; void * route(void *arg) {char *id (char *)arg;while(1){if(ticket>0){usleep(1000);printf("…

Bash基本语法

1. 变量赋值 a375 hello$a 这里需要注意的是,等号两边不能有空格 还有一个例子是这样的 例1: 结果为: 关于上述,主要有如下几点: $hello和${hello}是一样的,在bash中如果遇到空格,tab键时&a…

windows下 , py运用了 进程池, 将py打包成exe,出现错误的 解决思路之一

在windows上,用pycharm开发了一个小项目, 用到了from concurrent.futures import ProcessPoolExecutor 本来在pycharm里面,运行的好好地, 可是打包成exe的时候, 发现 当程序运行到 进程池执行任务的时候,会创建一个新的界面, 猜测应该是创建了一个新的进程, 百度后,发现在 程序…

关于fd和fp(fd:file descirptor fp:file pointor)

通常,我们在输入数据或输出数据的设备为键盘或者显示器。当然,我们比较熟悉的输入输出,可能就是对于文件的操作,还有直接从终端输出,显示到显示器上。在C语言中,我们使用fopen,fclose,fread,fwrite对文件进…

粗谈pragma once与 #ifndef的区别

#ifnde不受编译器的任何限制; #pragma once不受一些较老的编译器支持,兼容性不够好

在mac os10.13系统下 ,将py文件打包成可执行程序后, 里面的路径出现的问题

本来 用命令行运行py文件, 代码里面 获取当前路径的 语句 例如: os.getcwd() os.path.abspath(__file__) os.path.realpath(__file__)都可以获取到当前文件的路径, 但是打包成 可执行程序后, 统统不对了, 变成了 类似 /usr/xxx 的路径 https://stackoverflow.com/questions/50…

[linux]wait详解

wait:进程等待 主要有两种等待方式:阻塞式等待和非阻塞式等待 阻塞式等待:如果子进程正在运行,父进程将会一直等待着子进程运行结束,并且自己什么事都不干 非阻塞式等待:如果子进程正在运行,…

centos 使vim支持+python和+python3

本文为了给ycm服务,不单独存在。 查看是否支持python vim --version | grep python然后 下载vim8源码: git clone https://github.com/vim/vim.git 1 进行编译安装,添加python3和python2.7的支持: 进入下载的vim的源码文件夹中&#x…

ffmpeg的学习-00

命令行 大体样式 ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...有道翻译的 以后仔细回看 2.描述 ffmpeg是一个非常快的视频和音频转换器,也可以从一个实时音频/视频源抓取。它还可以转换之间的任意采样…

[Linux]消息队列

我们知道进程间通信的方法有多种,主要有管道,消息队列,信号量,共享内存,socket等。之前介绍过管道,今天再介绍一个新的概念–消息队列。 消息队列:将一个进程到另一个进程之间发送数据块的方式…

详解centos7 YCM YouCompleteMe自动补全安装,亲测成功

文章经重新排版转移至以下链接 https://blog.csdn.net/csdn_kou/article/details/84633663

python 异步与io

文档地址: https://docs.python.org/zh-cn/3/library/asyncio.html 以后再记录学习笔记 待续。。。

tornado 学习注意事项--00

设置url匹配的时候, (r/(.*), AMStaticFileHandler,dict(pathos.path.join(current_path, html), default_filenameindex.html))像这种语句要放到最后,因为放到前面的话, 后面的就无法匹配!

C++关键字速查手册

[TOC] https://blog.csdn.net/csdn_kou/article/details/81113215 C98关键字 C11 关键字共73个 alignas alignof用于获取取指定表达式指定的(类似sizeof,可以直接是类型名)的对齐(alignment)。alignas用于声明时指定对齐类似于现有的类型…

[Linux]信号

Linux下的信号是一个什么概念呢。我们在现实生活中也遇到过信号之类的。比如红绿信号灯,班主任叫你去办公室并且脸色不好,诸如此类的都会给你一个信号。让你辨别事情的发生。同样,Linux下也有许多的信号,让你执行相应的操作。比如…

怎么用VLC播放器将m3u8链接视频下载到本地

转载 https://blog.csdn.net/saddyyun/article/details/85245135

【1】C++面试题函数引用重载宏命名空间

函数重载的条件 • 同一个名字 • 函数名字相同 • 参数列表不同 • 同一个作用域 为什么c支持函数重载而c不支持? c函数名字的修饰规则不一样。c编译器对函数修饰规则把int的参数列表形式加了进来,从而保证底层使用不同 cAdd(int a,int b)_AddcA…

[数据结构]Map和Set

说起map和set,想必我们都学过红黑树了吧,map和set就是红黑树的一个应用领域。它的底层就是由红黑树来实现的。下面简单说一下map和set的使用吧。 首先,有一个栗子是这样的,让我们统计出每种水果出现的次数。 我们会想到怎么解决…

js获取Json对象的长度

有两种Json形式: 第一种: var json1 {"data":[{"name":"zs","age":"10"}]};对于这种格式的json数据,如果想获取data的长度,就可以用以下这种方式: var length …