bash 订阅
Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。Bash是Bourne shell的后继兼容版本与开放源代码版本,它的名称来自Bourne shell(sh)的一个双关语(Bourne again / born again):Bourne-Again SHell。Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix shell 一样,它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。一个名为Shellshock的安全漏洞在2014年9月初被发现,并迅速导致互联网上的一系列攻击。这个漏洞可追溯到1989年发布的1.03版本。 展开全文
Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4都将它作为默认shell。Bash是Bourne shell的后继兼容版本与开放源代码版本,它的名称来自Bourne shell(sh)的一个双关语(Bourne again / born again):Bourne-Again SHell。Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix shell 一样,它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。一个名为Shellshock的安全漏洞在2014年9月初被发现,并迅速导致互联网上的一系列攻击。这个漏洞可追溯到1989年发布的1.03版本。
信息
外文名
bash
类    别
计算机程序
命令语法
Bourne shell命令语法的超集
中文名
重击
全    称
Bourne-Again Shell
bash概念
Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell [1]  。事实上,还有许多传统UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等等,Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,大多数的时候,一个Shell Script通常可以在很多种Shell上使用。bash是大多数Linux系统以及Mac OS X默认的shell,它能运行于大多数类Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现Windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。bash的命令语法是Bourne shell命令语法的超集。数量庞大的Bourne shell脚本大多不经修改即可以在bash中执行,只有使用了Bourne的特殊变量或内置命令的脚本才需要修改。 bash的命令语法很多来自Korn shell (ksh) 和 C shell (csh), 例如命令行编辑,命令历史,目录栈,$RANDOM 和 $PPID 变量,以及POSIX的命令置换语法: $(...)。作为一个交互式的shell,按下TAB键即可自动补全已部分输入的程序名、文件名、变量名等等。 [2] 
收起全文
精华内容
下载资源
问答
  • GitHub教程 Git Bash详细教程

    万次阅读 多人点赞 2018-01-17 16:12:58
    作为一个萌新,我翻遍了网上的Git Bash教程,可能因为我理解力比较差,经常看不懂教程上在说什么。 (。-`ω´-)所以我决定自己一边摸索一边记录,写教程造福那些理解力跟我一样差的人…… 第一篇教程会涉及...

    作为一个萌新,我翻遍了网上的Git Bash教程,可能因为我理解力比较差,经常看不懂教程上在说什么。 (。-`ω´-)所以我决定自己一边摸索一边记录,写教程造福那些理解力跟我一样差的人……



    这个主要介绍Git Bash的使用教程。

    1 下载安装

    首先抛一个Windows用户的下载链接:Git for windows
    下载下来之后直接安装,除了下图选第一个,其他的不用改,直接next就行。
    选这个use git from git bash only
    在这里插入图片描述
    安装完成后我的电脑上是显示了这么三个东西的。
    这里写图片描述

    • Git CMD:
        Git CMD我并没用过,但是我查了一下它是什么。据别人说,Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能。所以建议在使用的时候,用Bash更加方便(原网址)。
    • Git GUI:
        其次就是Git GUI,Git GUI是Git Bash的替代品,他为Windows用户提供了更简便易懂的图形界面。(但是相比GitHub Desktop这个桌面版客户端,_(:3 」∠)我觉得Git GUI也没什么用。)
    • Git Bash:
        最后是Git Bash,Git Bash是命令行操作,官方介绍有一句就是“让*nix用户感到宾至如归。”((;´༎ຶД༎ຶ`) 当然了,萌新用户使用了就肥肠憋屈。)

    2 设置用户

    下载之后打开是这个样子的,第一件事设置用户。注意这个不是登录哦,是给你的电脑设置一个用户,等你上传的时候,告诉远程仓库是谁上传的而已。

    git config --global user.name "Your Name"注意前边是“- -global”,有两个横线
    git config --global user.email "email@example.com"
    在这里插入图片描述


    3 本地文件夹的操作

    3.1 进入文件夹

    首先你可以试着打开你本地仓库的文件夹。
    比如我要打开E:\code有两种方法

    1. 直接在电脑上打开那个文件夹,然后在文件夹空白处右键选择Git Bash here
      在这里插入图片描述

    2. 在Git Bash中输入路径
      注意! 使用cd命令进入到目录中时,在Git-Bash中应该使用斜线”/”, 而不是反斜线”\”
      ①可以逐个输入文件夹名(在文件夹名称前要加cd )
      在这里插入图片描述
      ②也可以直接输入一个完整的文件夹路径
      在这里插入图片描述

    3.2 查看

    • 当前目录
      你输入命令之前上边有一行字,后边那段黄色的就是你所在的文件夹位置。你也可以输入$ pwd,回车之后进行查看。在这里插入图片描述
    • 查看当前文件夹都有什么文件$ ls
      在这里插入图片描述

    3.3 退出文件夹

    当然你也可能进错文件夹,要学会回退。
    $ cd .. 点和cd之间有空格

    就可以回退到上一个文件夹。
    在这里插入图片描述

    3.4 新建、删除

    $ mkdir +文件夹名字 只能新建文件夹
    我在E盘的code文件夹下新建一个front-end文件夹。建完之后打开文件夹看看创建成功了嗷。
    在这里插入图片描述
    touch +文件名 只能新建文件
    在这里插入图片描述

    $ rm 文件名.文件类型 删除文件
    在这里插入图片描述
    $ rm -r 文件夹删除文件夹 ,注意这个要回到上一级文件夹才可以删。比如我要删除front-end文件夹,front-end在code里边,我就要在code目录下删除。
    在这里插入图片描述


    4 仓库设置

    你既然学git,那就是想要把本地的代码放到远程仓库托管。
    托管就是,代码是小朋友,你就是他父母,你把它丢到托儿所,让托儿所帮你管。怎么去托儿所,总不能一生下来就在托儿所。你得把孩子从家里送过去吧。放学了你得把孩子接回来吧。(当然这个例子不太恰当。)
    那你需要一个本地存储代码的地方(家里),你还需要一个远程仓库(托儿所)

    4.1 初始化本地仓库

    进入到你想建立本地仓库的文件夹,它可以是空的,你建好了之后再写代码。里边也可以有东西,直接建就好。
    $ git init
    我用个空文件夹做示范:E:\code\front-end
    在这里插入图片描述
    初始化成功之后,你的文件夹里就会多出.git的隐藏文件。 (●′ω`●)千万不要乱删,你如果看他烦你就设置一下不显示隐藏文件。

    4.2 新建远程仓库

    打开github右上角,点击new repository
    在这里插入图片描述
    在这里插入图片描述

    • 说一下仓库的私有和公有
      本来也是个开源社区,很多大佬们都把自己的东西开源了,也就是放在共有仓库里,可以让人查阅。也鼓励大家使用共有仓库 (๑•́ ₃•̀๑)。
      以前使用私有仓库是付费, 或者你可以申请学生认证获得私有仓库的使用权。但是现在2020年3月份的时候我收到github的邮件,邮件里边说现在已经开放私有仓库的使用了。
    • 说一下学生认证
      以前github的教育认证可以让学生和教育者免费使用私有仓库,并且还有许多其他的优惠政策。比如github的一些付费功能,教育认证之后会有巨大的折扣。戳我查看如何进行学生认证╰(●’◡’●)╮

    4.3 建立连接

    孩子在家里,你能用意念让他直接飞到托儿所吗,显然不可能,那你总得把他送过去,或者用校车之类的吧。
    那现在就得想办法建立远程仓库和本地仓库的连接。
    4.3.1 配置SSH,给孩子联系好校车。
    ヽ(・ω・。)ノ点击进入《SSH Key配置教程》
    4.3.2 配置完SSH,你就可以使用SSH连接了。
    注意,你是仓库的主人你才能使用SSH连接,如果你不是仓库主人,只是某个项目的成员,那你只能使用HTTPS连接。
    不管使用哪一种连接方式,都是一样操作,现在我就用SSH链接了。复制红框框里的代码。
    在这里插入图片描述
    4.3.3 在你的本地仓库打开gitbash。
    $ git remote add + 名字 + 连接地址
    连接地址就是你刚才复制的那块。
    我下边写的就是添加一个叫origin的远程仓库。
    在这里插入图片描述

    • 名字origin:你在往远程仓库推送的时候,你会说我要推给谁,总得给它起个名字。(你把孩子送去托儿所,你总得告诉司机是哪个托儿所吧)并且你以后可能会一个本地仓库连接多个远程仓库(这是后话),所以必须起名字加以区分。
    • 补充一下:你的本地仓库可以链接多个原厂仓库,github毕竟是国外的,有时候访问起来会很慢,因此你可以连接到国内的仓库上,比如gitee之类的。详细可以等你学会了这个文章之后,戳一下看这一篇→git bash 连接多个远程仓库

    4.3.4 添加之后没有任何提示,如果你想确定是否成功了,你可以再输一遍,这时候他会提示你刚才已经设置过了。
    在这里插入图片描述
    上边的方法能用但是比较笨(…•˘_˘•…),所以你得学个高端一点的。
    $ git remote -v
    测试一下,看到没。显示我已经添加了叫origin的仓库。一个push一个fetch,就是一个把代码推到远程仓库,一个把代码从远程仓库取回来。这两个一定是成对存在的。
    在这里插入图片描述
    补充一点:如果你以后不想连接这个远程仓库了,只需要输入git remote remove + 名字即可。比如我刚才添加的远程仓库代称是origin,那我就要写:git remote remove origin

    4.4 文件上传

    4.4.1 git add修改的文件添加暂存区,也就是将要提交的文件的信息添加到索引库中。(看不懂没关系,现在来说这个不重要)。
    什么是修改的文件,你新建、更改、删除文件都是修改。
    git add有好多种。下边我介绍一下,看看就行,对现在来说记住最后一条就可以了

    • $ git add +文件名.文件类型 ,将某个文件加到缓存区
    • $ git add +文件名.文件类型 ... 文件名.文件类型 ,将n个文件添加到缓存区
    • $ git add xx文件夹/*.html,将xx文件夹下的所有的html文件添加到缓存区。
    • $ git add *hhh ,将以hhh结尾的文件的所有修改添加到暂存区
    • $ git add Hello* ,将所有以Hello开头的文件的修改添加到暂存区
    • git add -u ,提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
    • git add .,提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
    • git add -A,提交所有变化git add前几条都可以记不住,这个必须记住!!!

    在这里插入图片描述
    我现在在本地仓库新建一个文件叫readme.md,现在我将它添加到缓存区。(没错虽然图里是read,但是我就是要创建叫readme的文件,往后看就明白了)
    在这里插入图片描述

    4.4.2 git commit 将当前暂存区的文件实际保存到仓库的历史记录中(看不懂没关系,现在来说这个不重要)。你现在可以简单的理解为给你刚才add的东西加一个备注,你上传到远程仓库之后,修改的文件后边会显示这个备注
    $ git commit -m "修改注释"
    在这里插入图片描述
    一定要加-m,否则会进入vim编辑器,对新手很不友好,所以还是加上-m
    4.4.3 git push激动的搓搓小手,终于要把文件推到远程仓库了。
    向一个空的新仓库中推文件:$ git push -u 仓库名称 分支

    • 仓库名称:刚才我添加连接的时候,给仓库起名叫origin
    • 分支:你现在只有主分支,所以分支直接写master。以后合作项目的时候,成员之间建了不同的分支,你就可以往你自己的分支上推。

    在这里插入图片描述
    我们第一次推送master分支时,加上 –u参数才会把本地的master分支和远程的master分支关联起来,就是告诉远程仓库的master分支,我的本地仓库和是对着你的哦,不是对着别的分支的哦。
    只有第一次推的时候需要加上-u,以后的推送只输入:
    $ git push 名称 分支
    还有一个$ git push origin master -f 强制推送,如果你某次推送失败,git bash报错,你懒得处理错误,你就可以用这个。但是有风险,因为报错90%是因为你本地仓库和远程仓库数据发生冲突,使用这个会直接用本地数据覆盖掉远程数据,可能损失数据哦。

    现在你去网页版刷新一下,就可以看到你本地仓库的东西都在那里了。并且文件后边写着你在commit步骤中添加的注释。
    在这里插入图片描述
    4.4.4 其他
    (눈_눈)我缓缓打出一个问号,我的commit怎么多写了一个e?我文件名字叫readme我怎么就写了read
    先来看看怎么查看自己的提交记录?虽然写错了查看提交记录也没用。我就是单纯想让你们多学一条命令:
    $ git log
    在这里插入图片描述
    提交记录里也显示我就是多写了一个e。

    • 怎么抢救一下commit的注释?
      $ git commit --amend -m "修改的内容"
    • 那怎么抢救一下文件名?
      直接修改文件名重新提交就可以啦。
      git add -A —> git commit -m “修改文件名” —> git push origin master
      在这里插入图片描述
      ?push时候报错?
      这是因为github觉得我的本地仓库和远程仓库冲突了:
      因为我刚才在本地修改了上一次的commit信息。(后边详细解释
      $ git push origin master -f 这个-f就是force,强制推送。

    推完之后看看你的远程仓库,文件名改了,文件名后边的注释也是我第二次commit的注释。上边有个commit选项,
    在这里插入图片描述
    在这里插入图片描述

    • 补充解释
      • $ git commit --amend的作用:
        github不管你做错了啥,他都会给你保存的,就是即使你改了,你的错误记录永远存在!但是使用git commit --amend,你可以神不知鬼不觉悄咪咪修改你的错误commit注释,╭(●`∀´●)╯只有天知地知你知。

      • push时候报错:
        github你可以理解为差额备份,就是你本地提交上去之后,它备份起来。你本地修改了,它会对你修改的部分继续备份。也就是说在你这次修改之前,本地仓库应该和远程仓库一模一样。
        但是我刚才强行修改了上次的commit注释信息。现在本地仓库里;

        • 上次的commit是“新建了readme”,
          使用git log看一下,本地仓库上次的提交注释确实是改变了。在这里插入图片描述
        • 但是远程仓库上次的commit是“readmee”。

        我修改的是上次的commit,所以我这次推的时候github就认为这次修改之前的本地仓库和远程仓库不一样,因此就会报错说我数据冲突。

    4.5 文件下拉

    上边push报错,我自己知道数据差在哪里,所以使用了强制推送。但是在团队合作中,push报错,那铁定是你队友修改了远程仓库,如果你再强制上传,那你就是毁了你队友的代码。所以如何保证在你修改之前,自己的文件跟远程仓库一致呢。
    方法1: $ git pull 仓库名称

    尝试一下
    比如我现在跑到我的远程仓库修改了readme:

    • 点要修改的文件,进去之后点击编辑。
      在这里插入图片描述
    • 写内容
      在这里插入图片描述
    • 写完内容提交
      在这里插入图片描述
    • 这时候我已经修改成功了
      在这里插入图片描述
    • git pull完成之后打开本地的readme,发现hello world已经进来了嗷。
      在这里插入图片描述
    • git log看一下,commit的记录也显示了。
      在这里插入图片描述

    方法2:
    $ git fetch + $ git merge

    尝试一下,

    • 这次我又在远程仓库加一行字
      在这里插入图片描述
    • git fetch,看起来数据也是拉下来了,要 git merge干嘛。然鹅! 事情是这样的,git fetch之后,我打开本地文件,发现内容没变
      在这里插入图片描述
    • 那继续git merge,这之后本地文件内容才改变!
      在这里插入图片描述

    我在提示一下,我在fetch之后,不止没有修改本地文件,就连git log也没显示我下拉文件了,但是merge之后就都显示了。我们可以认为 pull = fetch+merge。git fetch 并没更改本地仓库的代码,只是拉取了远程数据,git merge才执行合并数据。

    回想一下你刚才是怎么push到远程的

    • git add添加到上传缓存区
    • git commit给缓存区的内容添加备注,此时本地的commit修改啦,但是远程的commit和文件都没修改。
    • git push 修改远程文件和commit信息

    而你下拉文件过程

    • git fetch 将数据拉下来,但是没修改本地的commit和文件
    • git merge 改变本地数据

    4.5 文件克隆

    下拉仓库学会了,那克隆呢?
    克隆就是你本地上没有,你直接把远程仓库的东西搞下来。
    我现在有一个完整仓库,点击右边的绿色按钮。
    在这里插入图片描述
    在这里插入图片描述

    • 如果你只想看看源码,那你可以直接选download zip,下载源码压缩包。
    • 如果你使用的是git desktop,那你就选open in desktop
    • 如果你想学克隆你就继续看,很简单的就一句。

    仓库是你自己的,你就使用SSH连接,不是你自己的,你没权限你就切换到HTTPS,再复制地址。
    它克隆下来是一个文件夹,你想把文件夹放哪里就在哪打开gitbash
    $ git clone 加上你刚才的地址
    在这里插入图片描述
    我在E:\code\vue里执行了克隆。
    (。◕ˇ∀ˇ◕)。下载完成后,打开这个文件夹,就发现里边有个文件夹了。文件夹名字就是远程仓库的名字。
    在这里插入图片描述
    还记得git remote -v吗?用它看一下你下下来的本地仓库连接上那个远程仓库没。
    在这里插入图片描述
    已经连接了嗷。放心使用吧。


    我是萝莉Ann, 梦想是当个程序媛。(●´∀`)♪永不服输!

    展开全文
  • Linux下提示bash:command not found解决方法小结

    万次阅读 多人点赞 2019-04-19 14:33:58
    0x00 前言 文章中的文字可能存在语法错误以及...1.前几次还好用的命令,这次再输入就出现-bash: ***: command not found的情况; 2.第一次使用就出现 -bash: ** : command not found的情况。 导致这种问题的原...

    0x00 前言

    文章中的文字可能存在语法错误以及标点错误,请谅解;

    如果在文章中发现代码错误或其它问题请告知,感谢!

    0x01 解决方法

    我们在使用linux开发编译的时候可能会遇到:
    1.前几次还好用的命令,这次再输入就出现-bash: ***: command not found的情况;
    2.第一次使用就出现 -bash: ** : command not found的情况。
    导致这种问题的原因有很多(就像导致肚子疼痛的原因各种各样),有可能是环境变量配置问题,也可能某一个bin文件夹下的内容全部删除导致等,所以现在将主要导致bash:command not found的原因写在下面,希望对大家的开发过程有帮助。

    1.检查该命令工具是否安装
    出现这个问题时,首先用whereis命令确定该指令工具是否安装,例如确定gcc是否安装
    whereis gcc,如果此时显示gcc:/usr/bin/gcc 则说明已经安装好,可以接着用下面的方法继续找原因,如果只是显示 gcc:,则说明gcc没有下载,此时进行下载就可以。

    Centos(Rehat系列)系统下载gcc命令:yum install gcc
    Ubuntu系统下载gcc命令:apt-get inatall gcc

    2.检查各个bin文件夹的内容是否非空
    在使用其它相对更复杂的手段“还原”到之前好用的状态之前,应该先检查的bin文件夹里的命令是否都在,这个方法最简单也最直观。如果自己需要用到的命令所在的bin文件夹为空,那么就会理所应当的出现-bash: ***: command not found情况。

    要检查的bin文件夹有以下几个:
    /bin, /usr/bin, /sbin, /usr/sbin

    查看这四个里面的是否为空,若出现为空的情况,那么解决办法就是找一个同样系统版本的linux把对应文件夹的内容复制到本地空的bin文件夹中。例如我的linux版本是CentOS release 6.8,我输入gcc命令编译的时候出现bash: gcc: command not found ,通过查看四个目录发现其中 /usr/bin内容为空,然后自己通过将同样的CentOS release 6.8系统下的 /usr/bin内容全部复制到本地的/usr/bin中,然后再次gcc编译,通过。
    注意,这种排查方法适用在输入类似ls、tty这种常见指令以前可用但最近出现not found的情况。

    3.检查是否是$PATH设置是否正确
    $PATH决定了shell到哪些目录下去寻找命令或工具,PATH的值是一系列目录,当程序运行时,Linux系统会到这些目录下进行搜索,所以当出现 -bash: ** : command not found可能因为是PATH没有设置。

    PATH设置格式:

    PATH = $PATH:<PATH1>:<PATH2>:<PATH3>:...:<PATH N>
    

    可以将自己指定的路径加到PATH中(见上,若有多个变量路径则在中间用冒号":"隔开),例如:export PATH=/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH,设置成功之后,使用echo查看是否配置成功:

    [root@localhost u-boot-sh4]# echo $PATH
    /opt/STM/STLinux-2.3/devkit/sh4/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
    

    上述方法添加PATH 在终端关闭后会消失。建议通过 vi /etc/profile 修改PATH,也可修改主用户目录下的 .bashrc,这样可以永久生效。若使用前一种方法,则输入指令vi /etc/profile,然后在该文件最后添加:

     export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
    

    保存后,退出,再执行:

     [root@localhost etc]# source /etc/profile
    

    不报错就成功。

    当然,可能还有其它原因导致bash:command not found,这时候就需要在网上仔细找,把导致该问题的前因后果都说清楚(配置了什么,删掉了什么),相信问题最后一定能解决。

    以上。
    参考文档:
    1.https://blog.csdn.net/awenluck/article/details/25233883
    2.https://blog.csdn.net/panjiao119/article/details/79790324
    3.https://blog.csdn.net/zq199692288/article/details/78871046
    4.https://blog.csdn.net/FightForProgrammer/article/details/41960707

    展开全文
  • Linux之bash介绍

    万次阅读 多人点赞 2017-01-21 18:22:36
    Shell的介绍shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。...- Bourne Again SHell(bash) - C SHell(csh) - KornSHell(ksh) - zsh各个shell的功能都差不太多,在某些语法的下达下面有些区别,Li

    Shell的介绍

    shell是一个程序,可以称之为壳程序,用于用户与操作系统进行交互。用来区别与核,相当于是一个命令解析器,Shell有很多中,这里列出其中几种

    • Bourne SHell(sh)
    • Bourne Again SHell(bash)
    • C SHell(csh)
    • KornSHell(ksh)
    • zsh

    各个shell的功能都差不太多,在某些语法的下达下面有些区别,Linux预设就是bash。这里主要介绍bash

    bash

    bash命令是sh命令的超集,大多数sh脚本都可以在bash下运行,bash主要有如下这些功能

    bash功能

    • 记录历史命令:bash可以记录曾经的命令,保持在~/.bash_history文件中,只保存上次注销登录之后的命令
    • tab键自动补全:使用tab见可以自动不全命令或者目录i
    • alias命令别名:可以使用alias ll='ls -al'来设置命令的别名
    • 工作控制:可以将某些任务放在后台去运行,这里不多种介绍
    • 程序脚本:可以执行shell脚本文件
    • 通配符:在查找相关文件或者执行相关命令时,可以使用通配符*
    • 内建命令type:可以使用type 命令来查看某个命令是否为内建在bash当中的命令「

    bash变量

    bash中变量有两种,分别是环境变量和自定义变量,可以理解为全局变量和局部变量,在理解他们的区别前,需要知道父程序和子程序,举个例子,当前的bash我们称之为父程序,而在这个bash下执行的任何程序,都称之为子程序。那全局变量和局部变量的区别就是,全局变量在子程序中仍然有效,局部变量只在当前程序中生效。(注意,一旦退出父程序这个bash的话,无论是全局变量还是局部变量都失效了,再次打开bash时,该变量是不存在的)

    变量范围

    变量的设定

    变量的设定有几个规则,这里列举如下:

    • 设定变量通过=来链接,例如name=sujinzhou,两边不能有空格,如果有空格的话,需要用引号
    • 变量名只能是英文名和数字,只能是英文开头
    • 如果变量内容被引号扩起来的话,双引号和单引号是有区别的
    • 双引号里面的特殊字符,会保持原有的特性。
    • 单引号里面的特殊字符,只会是字符
    • 使用\将特殊字符转换为一般字符
    • 使用``这个符号扩起来的命令会先计算这个命令里面的内容,这个指令等价于$()
    • 给原有的变量添加值时,使用 变 量 , " {变量}," ,"变量"再加具体的内容

    变量类型

    bash中变量类型有两种,一种是普通的字符串,一种是整数;设置变量的类型使用的是declare命令,delcare的命令格式如下

    declare -[axir] variable
    

    参数的意思:

    • -a:将variable定义为数组
    • -i:将后面的变量设置为整数类型
    • -x:与export一样,将后面的变量设置为环境变量
    • -r:将后面的变量设置为只读变量
      如果declare命令没有接任何变量的话,则表示显示所哟的

    定义数组

    var[index]=content
    

    变量的删除

    删除变量使用如下命令

    • unset 变量名

    变量的查看

    查看单个命令的内容,可以使用echo命令,使用echo $变量名就可以查看变量内容,另外如果要查看所有变量有3个命令,分别是如下几个命令,每个命令又有区别。

    • echo $变量名:用于显示制定变量
    • env:用来查询环境变量,
    • set:显示shell变量,包括私有变量与用户变量,不同的shell有不同的私有变量,在shell中设置变量之后,可以通过set查到
    • export:显示当前导出成用户变量的shell变量,也是用来查询环境变量的,shell的私有变量不会出现

    Bash shell的操作环境

    在shell中设置的变量,无论是环境变量还是自定义变量,在bash中注销登录之后,就失效了。下次登录时,是没有这些变量的,如果想要这些变量永久生效,是需要下如配置文件的,bash在启动时,会读取这个配置文件,来设置当前shell的各种变量。shell分为两种,分别是login shell和nonlogin shell,这里先说login shell;login shell是需要输入用户名和密码的,一般情况下,login shell在登录之后,会去读取两个文件,来设置当前shell的环境变量,分别是

    1. /etc/profile:这个配置文件是默认配置文件,是系统整体的设置
    2. /.bash_profile或者/.bash_login或者~/.profile:这个是用户的自定义设置文件

    shell在读取/etc/profile中的文件之后,会去读取用户自定义的设置文件,按照顺序读取上文中所说的自定义设置文件,只要找到其中任何一个,就不再继续。在用户自定义的配置文件中,都会调用~/.bashrc这个文件,来配置当前的这个shell

    /etc/profile或者~/.bash_profile都是在登录的时候才去读取,如果将自己的一些设置到这些文件之后,一般都需要重新登录一次shell才会生效,也可以使用source这个命令,来读取配置文件的内容到当前的这个shell

    数据流重导向

    数据重导向,表示将数据从一个地方导向到另外一个地方,在linux的bash中,有两种输出,分别是

    • 标准输出:输出在屏幕当中的正常的提示信息,或者正常的返回值
    • 错误输出:命令执行出错时,显示在屏幕当中的出错信息

    有时候,我们需要将标准输出或者错误输出保留到某个文件中,方便以后你查询,这种情况下,就需要数据流重导向,也就是将输出到屏幕的信息导向到一个文件中。而导向又分为标准输出导向和错误输出导向

    • 标准输出重导向:代码为1,使用>或者>>
    • 错误输出重导向:代码为2,使用2>或者2>>

    在linux中一个特殊的装置,是/dev/null,所有将导向到这个装置的数据都会被丢弃,相当与删除数据。

    有时候,我们需要将标准输出和错误输出导出到文件中,则可以使用符号 2>&1,这个符号是连在一起的,表示将错误和标准输出一起输出。

    除了输出之外,还有输入,

    • 标准输入重导向:代码为0,使用<
      某些由键盘输入的数据,可以使用标准输入重导向,从文件中输入数据。

    管线命令

    常用的关系命令有如下几个,具体的用法可以查询man文件

    • 选择命令
      • cut
      • grep
    • 排序命令
      • sort
      • wc
      • uniq
    • 双向重导向
      • tee
    • 字符转换命令
      • tr
      • col
      • join
      • paste
      • expand
    • 分割命令
      • split

    其他

    命令别名

    alias             //显示所有的命令别名
    alias rm='rm -i'  //设置命令别名
    unalias rm        //删除命令别名
    

    历史命令

    使用history命令,可以显示当前shell的内存中保存的历史记录命令,这里每个shell的历史记录命令是独立的,bash在退出的时候会自动将内存中的历史命令写入到histfiles中,也可以手动将当前shell内存中的历史命令同步回histfiles中,如果想从当前shell A读取另一个shell B中的历史命令了,需要在B这个Shell中先使用命令history -w将内存中的命令写入到histfiles中,然后在A这个shell中使用history -r来将histfiles中的命令读取到内存中

    history n     //显示最近的n笔命令的意思
    history -c    //将shell中所有的history命令全部删除
    history -a    //将目前新增的指令加入到histfiles中,如果不存在,则加入到~/.bash_history中
    history -w    //将内存中的history指令保持到histfile中
    history -r    //将histfile中的指令读取到这个shell中
    

    历史命令的读取与记录如下:

    • 当使用bash登录后,去~/.bash_history中读取历史命令
    • 注销当前bash时,会将最近的HISTFILESIZE笔命令更新到~/.bash_history中,也可以使用history -w命令来强制更新

    可以使用!来执行历史命令,如下:

    !2          //执行历史命令中的第二个命令
    !command    //从最见的命令往前搜,查找以command开头的命令
    !!          //执行上一个指令
    
    展开全文
  • bash-oo-framework:Bash Infinity是bash的现代样板框架标准库
  • bash-it:社区Bash框架
  • Linux -bash: java: command not found 解决方法

    在Linux环境下安装JDK之后,使用java 测试是否安装成功,结果报错-bash: java: command not found 


    解决方案如下:

    1、查看Linux环境自带JDK

    使用命令:# rpm -qa|grep gcj

    显示内容其中包含相应信息
    # java-x.x.x-gcj-compat-x.x.x.x-xxjpp
    # java-x.x.x-gcj-compat-devel-x.x.x.x-xxjpp


    2、卸载

    # rpm -e --nodeps java-x.x.x-gcj-compat-x.x.x.x-xxjpp
    # rpm -e --nodeps java-x.x.x-gcj-compat-devel-x.x.x.x-xxjpp


    3、卸载rpm版的jdk:

    使用命令:#r pm -qa|grep jdk

     显示:jdk-x.x.x_xx-fcs
     卸载:#rpm -e  --nodeps  jdk-x.x.x_xx-fcs


    4、下载jdk

    打开网站http://www.oracle.com/technetwork/java/javase/downloads,选择对应版本JDK,点击下载


    5、在usr目录下创建java安装目录

    cd /usr
    mkdir java


    6、将下载好的JDK文件copy到/usr/java目录

    cp /mnt/hgfs/linux/jdk-8u60-linux-x64.tar.gz /usr/java/


    7、解压到当前目录

    tar -zxvf jdk-8u60-linux-x64.tar.gz

    得到文件夹 jdk1.8.0_60


    8、编辑配置文件,配置环境变更

    vim /etc/profile

    添加如下内容:
    JAVA_HOME=/usr/jdk
    CLASSPATH=$JAVA_HOME/lib/
    PATH=$PATH:$JAVA_HOME/bin
    export PATH JAVA_HOME CLASSPATH


    9、重启机器或者执行命令:source /etc/profile

    重启命令:sudo shutdown -r now


    10、查看安装情况

    java -version

    javac -version

    java version "1.8.0_60"
    Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
    Java HotSpot(TM) Client VM (build 25.60-b23, mixed mode)

    展开全文
  • git bash使用chmod不生效

    万次阅读 2021-04-21 10:16:38
    问题现象 在windows下使用git bash执行shell命令 $ chmod +x test.sh -rw-r--r-- 1 OME 197121 997 Apr 21 10:08 test.sh · 问题原因 shell脚本前面没有加上#!/bin/bash
  • bash-utility:Bash库,为Bash中的函数编程提供实用程序功能和帮助程序
  • Git_Bash工具

    2018-04-26 19:52:30
    Git Bash Git Bash Git Bash Git Bash Git Bash Git Bash
  • Gitxmind GIt bash 使用 xmindGitxmind GIt bash 使用 xmindGitxmind GIt bash 使用 xmindGitxmind GIt bash 使用 xmindGitxmind GIt bash 使用 xmindGitxmind GIt bash 使用 xmind
  • 作为一名运维工程师,BashShell脚本编写必不可少。然而,大家会发现专门用来编写BashShell脚本的IDE少之又少。但是,即使这样也阻止不了我们自己通过vim来打造一款属于自己的BashShell脚本开发环境。通过以下命令及...
  • bash-yaml:读取yaml文件并在bash中创建变量
  • BASH官方文档,BASH官方文档,BASH官方文档
  • bash shell 启动方式

    千次阅读 2016-05-31 22:49:34
    bash
  • bash源代码

    2016-08-03 13:26:25
    bash4.4源代码,学习了解bash原理,及系统级别开发的绝佳参考
  • zsh切换bash bash切换zsh

    万次阅读 2015-10-05 20:00:50
    zsh切换bash bash切换zsh 切换bash chsh -s /bin/bash 切换zsh chsh -s /bin/zsh
  • bash命令补全工具bash-completion

    千次阅读 2020-05-20 16:34:22
    bash命令补全工具bash-completion 要安装这个牛逼的小工具 需要执行如下命令 yum install epel-release -y yum install bash-completion bash-completion-extras -y 未安装bash-completion的虚拟机输入hostnamectl...
  • bash: /opt/ros/melodic或者kinetic或者其他版本ROS /setup.bash:的解决办法 在安装中输入命令 source ~/.bashrc 如果出现 bash: /opt/ros/melodic/setup.bash: 没有那个文件或目录 ==当然因为版本不同,如果是...
  • bash简介

    千次阅读 2020-04-19 15:38:01
    shell和bash的概念 shell是一类程序的统称,这些软件只要是能够按照用户的要求去调用操作系统的接口,就可以称之为shell程序.所以shell不是具体哪一个款程序,是一类软件的统称. linux发展至今,有许多shell程序,其中一...
  • win10的bash使用ssh连接远程服务器

    万次阅读 多人点赞 2017-06-23 17:19:49
    1. 前言微软已经在Win10一周年更新预览版中加入了Ubuntu Bash命令支持,相当于一个小型的linux系统,本来连接远程服务器的话,要使用putty啥的,现在可以用这个直接连接,我来讲讲步骤。2.步骤2.1 开启basha. 没安装...
  • bash教程

    2007-12-11 00:13:01
    bash教程bash教程
  • bash-utils 手工制作的bash脚本的集合,用于执行各种常见任务。 阅读清单 ShellCheck:改变生活的BASH短绒和测试工具包 用于Linux Shell的30个有趣的命令–VíctorLópezFerrando 7个令人惊讶的Bash变量 anordal...
  • source devel/setup.bash 会出错: bash: devel/setup.bash: No such file or directory 是因为要在catkin-ws文件夹下执行 在其他文件夹下都会报错 或者把 source devel/setup.bash 改为 source ~/catkin_ws/devel/...
  • PowerShell VS Bash

    万次阅读 2016-09-01 18:00:26
    PowerShell VS Bash
  • win10 bash切换目录/代替gitbash

    千次阅读 2017-11-20 19:15:17
    在用gitbash时突然想到是否可以用win10bash直接代替,尝试了很久无法切换目录,后来用ls -n测试了出来 默认的路径: 利用cd ../退回上级目录,并用ls -n查看目录 如上图,退到/mnt时,就可以切换磁盘进入别的...
  • Linux bash基本语法笔记

    2017-09-07 23:31:35
    Linux bash基本语法笔记Linux bash基本语法笔记Linux bash基本语法笔记Linux bash基本语法笔记Linux bash基本语法笔记Linux bash基本语法笔记
  • 这篇文章记录一下在MacOS上Bash版本的确认和升级方法。
  • Bash注释

    千次阅读 2019-09-23 13:12:37
    /bin/bash #echo "Martin" echo "Martin" #echo "Martin" 2)多行注释: #!/bin/bash :<<test echo "Martin" echo "Martin" test echo "Martin" 转载于:https://www.cnbl...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,378,733
精华内容 951,493
关键字:

bash