zoukankan      html  css  js  c++  java
  • 认识与学习BASH①——鸟叔的Linux私房菜

    认识与学习BASH①

    认识BASH

    壳程序

    BASH是一个壳程序,在用户与核心(kernel)之间建立沟通,从而使合适的用户调用操作系统的各项功能。壳程序的功能只是提供操作系统的一个接口,例如通过壳程序bash来调用许多指令:man,chmod,chown,vi,fdisk,mkfs等等,这些指令都是独立应用程序,但是我们可以通过壳程序(就是命令行界面)来操作这些应用程序,让这些应用程序调用核心来运行所需的工作。这就是壳程序。

    只要能够操作应用程序的接口这样的程序,都能称之为壳程序。狭义上指命令行方面的软件(包括BASH等),广义上的壳程序包括图形接口的软件。

    多种shells

    在Linux中有多种shells,存放在/bin目录下,不过Linux默认使用BASH。

    • /bin/sh (已经被/bin/bash所取代)
    • /bin/bash (Linux默认的shell)
    • /bin/tcsh (整合C Shell,提供更多的功能)
    • /bin/csh (已经被/bin/tcsh所取代)

    系统合法的shell就会被写入/etc/shells这个文件中,某些程序会检查这个文件。也可以在/etc/passwd这个文件内查看每个用户登陆时的默认shell是什么。

    Bash shell 的功能

    BASH相容于sh,并根据使用者的需求进行了加强,bash主要有以下优点:

    1. 历史记忆功能(history)

      可以使用键盘的上下键找到前后执行的命令,并可以进行修改,默认记忆的数目可以达到1000之多。这些命令记录都暂时保存在当前内存中,当成功登出系统后,这次的历史记录会被保存到~/.bash_history中。小心黑客入侵查看!

    2. 命令与文件补全功能(使用Tab键):

      直接在命令或者文件名后面按【tab】键之后,就可以进行命令或文件补齐。安装 bash-completion软件之后,还可以有“选项/参数”的补齐功能。

      不过,要想知道环境中的所有以 c 开头的指令,直接输入c之后按两次【tab】键就好了。在bash shell 下面,多按【tab】是一个不错的习惯。

    3. 命令别名设置功能(alias):

      可以把ls -lha这个指令替换成lall这个自定义的命令。直接在命令行中输入 alias就可以只扫目前的命令别名有哪些!可以这样设置:alia lm='ls -lha'

    4. 工作控制,前景背景控制(job control, foreground, background):

      使用前、背景的控制可以让工作进行的更为春丽!工作控制(jobs)用途更广,可以把工作丢到背景中去执行,可以在单一登录的环境中达到多任务的目的。

    5. 程序化脚本(shell scripts):

      类似于dos的批处理文件。

    6. 万用字符(Wildcard):

      例如:查询/usr/bin下面有多少以X为开头的文件,使用ls -l /usr/bin/X*就能知道。

    type :查询指令是否为Bash shell 的内置指令

    type [-tpa] name 不加任何参数时,type会显示出name时外部指令还是bash的内部指令。相关选项:

    1. -t :type会显示以下信息:
      • file 表示为外部指令;
      • alias 表示该指令为命令别名所设置的名称;
      • builtin 表示该指令为bash内置的指令功能。
    2. -p :如果后面接的name为外部指令时,才会显示完整文件名;
    3. -a :会由PATH变量定义的路径中,将所有含name的指令都列出来,包含alias

    指令的换行输入和快速删除

    如果指令太长的话,可以使用 反斜杠+回车 来换行继续输入。是跳脱符,可以跳脱下一个按键,以此为原理。

    关于快速删除指令和移动光标:

    1. [ctrl+u] / [ctrl_k]

      分别是从光标处向前【ctrl+u】,向后【ctrl+k】删除;

    2. [ctrl+a] / [ctrl+e]

      分别是让光标移动到开头和结尾。

    Shell的变量功能

    什么是变量

    变量就是以一组文字或符号等,来取代一些所设置或者是一串保留的数据。

    echo,unset,变量设置规则

    查看变量内容

    直接使用echo ${PATH}echo $PATH就能够查看变量的内容。

    设置变量

    使用`name=content(内容)就可以创建一个名为name的变量,并赋以内容。

    变量设置规则

    1. 变量与内容之间用=号连接;
    2. 等号两边不能直接接空白字符;
    3. 变量名称只能是英文字母与数字,开头不能是数字;
    4. 若内容中有空白字符,可以使用双引号或带引号:
      • 双引号内的特殊字符保持原有的特性,如:var="lang is $LANG",则echo $var可以得到"lang is zh_CN_UTF-8"
      • 单引号内的特殊字符仅为一般字符(纯文本)
    5. 可使用跳脱字符将特殊符号(如回车,$,空白字符,‘等)变成一般字符。
    6. 扩增变量内容时,可使用"$name"${name}累加,例如:PATH="$PATH":/home/binPATH${PATH}:/home/bin
    7. 系统默认变量一般为大写字符,自行设置的变量为小写字符(习惯)。
    8. 取消变量的方法为使用unset,例如:unset name

    export name可以将变量变成环境变量,这样就可以在bash子程序下应用了。父程序的自定义变量时是无法在子程序内使用的。

    可使用uname -r获取当前系统的核心版本。

    环境变量的功能

    set

    可以使用set观察所有的变量(含环境变量与自定义变量),参数说明

    PS1 提示字符的设置

    • d :可显示出“星期 月 日”的日期格式;
    • H :完整的主机名称。
    • h :仅取主机名称在第一个小数点之前的名字;
    • :显示时间,为 24 小时格式的“HH:MM:SS”
    • T :显示时间,为 12 小时格式的“HH:MM:SS”
    • A :显示时间,为 24 小时格式的“HH:MM”
    • @ :显示时间,为 12 小时格式的“am/pm”样式
    • u :目前使用者的帐号名称,如“dmtsai”;
    • v :BASH 的版本信息,如鸟哥的测试主机版本为 4.2.46(1)-release,仅取“4.2”显示
    • w :完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以 ~ 取代;
    • W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。
    • #:下达的第几个指令。
    • $ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $ 啰~

    例如我这样设置:PS1='[u@h:w ##]$,就可以显示时间和已经命令的次数。

    其实,$ 就是 关于本shell的PID,可以这样查看echo $$, ?号(关于上一个执行指令的回传值):如果成功执行则返回0,错误则返回非零,例如这样:echo $?

    OSTYPE,HOSTTYPE,MACHTYPE

    主机硬件与核心的等级。

    export

    将自定义变量转换成环境变量。它与env有什么区别呢?区别是:env只是展示环境变量,而set不仅打印环境变量,还展示自定义变量。

    子程序仅会继承父程序的环境变量,不会继承父程序的自定义变量。使用以下指令把自定义变量转换成环境变量:export name

    locale :影响显示结果的语系变量

    直接使用locale -a即可查看系统的所有语系,使用locale即可查看非常具体的设置,这个配置文件在/etc/locale/conf中,而所有的语系文件在/usr/lib/locale中。

    如果设置了LANG或者是LC_ALL的话,其他的语系变量就会被这两个变量所取代。

    待续。。。真多。。。

  • 相关阅读:
    git强行覆盖master分支
    git本地分支推送到远程分支
    gitignore
    copymemory()数组赋值
    加载log文件
    ExtractStrings字符串截取
    GetFileVersionInfoSize函数确定操作系统是否可以检索指定文件的版本信息
    delphi edit边框成为下划线
    delphi 中封装的VCl窗体Tab键响应问题
    delphi Table切换控件顺序问题
  • 原文地址:https://www.cnblogs.com/relaxx/p/12913982.html
Copyright © 2011-2022 走看看