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的话,其他的语系变量就会被这两个变量所取代。

    待续。。。真多。。。

  • 相关阅读:
    leetcode5 Longest Palindromic Substring
    leetcode17 Letter Combinations of a Phone Number
    leetcode13 Roman to Integer
    leetcode14 Longest Common Prefix
    leetcode20 Valid Parentheses
    leetcode392 Is Subsequence
    leetcode121 Best Time to Buy and Sell Stock
    leetcode198 House Robber
    leetcode746 Min Cost Climbing Stairs
    tomcat下使用druid配置jnid数据源
  • 原文地址:https://www.cnblogs.com/relaxx/p/12913982.html
Copyright © 2011-2022 走看看