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,一经查实,立即删除!

相关文章

线程之售票系统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…

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

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

[linux]wait详解

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

[Linux]消息队列

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

C++关键字速查手册

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

[Linux]信号

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

[数据结构]Map和Set

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

linux之信号

信号:在生活中,我们遇到过不同种类的信号,比如:(交通信号,乃至某个人的表情,动作等带给你不同的信号)然而,在我们的linux下,我们最熟悉的就是,当遇…

[Linux]继续探究mysleep函数(竞态条件)

之前我们探究过mysleep的简单用法&#xff0c;我们实现的代码是这样的&#xff1a; #include<stdio.h> #include<signal.h>void myhandler(int sig) {}unsigned int mysleep(unsigned int timeout) {struct sigaction act,oact;act.sa_handler myhandler;sigempt…

[Linux]死锁

死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局&#xff0c;当进程处于这种僵持状态时&#xff0c;若无外力作用&#xff0c;它们都将无法再向前推进。之前信号量的时候我们知道&#xff0c;如果多个进程等待&#xff0c;主要体现在占有锁的问题上。死锁也可以被定义…

[Linux]线程安全和可重入函数

线程安全&#xff1a;一个函数被称为线程安全的&#xff0c;当且仅当被多个并发进程反复调用时&#xff0c;它会一直产生正确的结果。如果一个函数不是线程安全的&#xff0c;我们就说它是线程不安全的。 重入&#xff1a;函数被不同的控制流程调用,有可能在第一次调用还没返回…

[Linux]信号量

信号量是一个计数器&#xff0c;用于为多个进程提供对共享数据对象的访问。 在信号量上只有三种操作可以进行&#xff0c;初始化、递增和增加&#xff0c;这三种操作都是原子操作。递减操作可以用于阻塞一个进程&#xff0c;增加操作用于解除阻塞一个进程。 为了获得共享资源…

[Linux]关于SIGCHLD

之前我们就学过&#xff0c;关于wait和waitpid来处理僵尸进程&#xff0c;父进程等待子进程结束后自己才退出&#xff0c;这样的方法有俩种方式&#xff0c;一种是父进程死死的等子进程退出&#xff0c;也就是使用阻塞的方式等待子进程退出&#xff0c;另一种方式是通过非阻塞的…

C语言思维导图

本人能力有限&#xff0c;知识点难免概括不全&#xff0c;如有错误欢迎指正

pthread和互斥量条件变量函数意义速查表

数据类型 pthread_t 线程 互斥量和条件变量

[Linux]共享内存

共享内存是UNIX提供的进程间通信手段中速度最快的一种&#xff0c;也是最快的IPC形式。为什么是最快的呢&#xff0c;因为数据不需要在客户进程和服务器进程之间复制&#xff0c;所以是最快的一种IPC。这是虚存中由多个进程共享的一个公共内存块。 两个不同进程A、B共享内存的…

[Linux]gdb调试多进程多线程例程

gdb相信学linux的同学已经比较熟悉了吧&#xff0c;它是linux下代码调试工具。我们在写c语言&#xff0c;c的代码时经常会用到&#xff0c;它有一些常用的调试命令: run&#xff08;r&#xff09;&#xff1a;运行程序&#xff0c;如果有断点在下一个断点处停止 start&#xf…

[Linux]守护进程(精灵进程)

一、守护进程是什么 守护进程是生存期很长的一种进程&#xff0c;可以说它是7*24小时工作的。&#xff08;什么是7*24&#xff0c;一周7天&#xff0c;每天24小时&#xff0c;这不就是一年365天一直在工作嘛&#xff0c;还搞的这么诙谐&#xff0c;哈哈&#xff09;。它们常常…

浅谈shell中的clear命令实现

NAME(名称) clear - 清除终端屏幕 SYNOPSIS(总览) clear DESCRIPTION(描述) clear可以在允许的情况下清屏. 它会在环境变量中查找终端的类型, 然后到terminfo数据库中找出清屏的方法. 《man手册》 #include <stdio.h>int clear_main(int argc, char **argv) {/* Th…