Shell

  • Shell字面理解是“壳程序”(操作系统可以分为核心kernel和外壳Shell两部分),用于用户和系统内核间的交互。相当于是一个命令解析器,其接收用户命令,然后调用相应的内核指令,完成相应的功能。
  • Shell有很多种,如Bourne Shell(sh)、Bourne Again SHell(bash)、C SHell(csh)、Z
    shell(zsh)等,这些Shell最大的区别就是命令集的不同。
  • 注1:在linux/mac中预设的Shell就是bash;在Windows中的Shell是cmd和PowerShell,cmd功能较为简单,PowerShell功能则非常强大,可以看作cmd的超集。
  • 注2:如何区分各种shell?可通过命令的开头字符,如果是$, #则为bash($为普通用户,#为管理员root超级用户);如果是PS <当前地址>则为Powershell,如果直接是<当前地址>则为cmd。
  • 注3:同时Shell又是一种编程语言,可自动执行一连串的命令,并具有定义变量、循环/分支控制结构等特性。

目录写法

  • 绝对路径:从根目录开始,以/开头
  • 相对路径:相对当前目录的路径,不以/开头
  • ./表示当前目录,../表示上一级目录(iterable)
  • ~表示当前用户目录,即/Users/user_name/
  • 路径结尾:文件夹的话结尾最好加/以和文件区分

    两种斜杠区别

    正斜杠/:网址路径,linux、mac下地址路径(斜率为正因此称为正斜杠),网址路径和地址路径本质是一样的,都是资源定位符;
    反斜杠\:转义字符、win下地址路径;

Command-line syntax: some basic concepts

命令行是指可以在终端中运行的命令,通常会有很多的选项、参数,这些选项和参数有多种组合形式,而如何描述这些组合形式则需要一定的规则(syntax),这套规则不仅运用在command line的相关文档中,很多函数相关的文档也用这套sytax来规定如何使用参数,对其了解清楚会很便于我们后续阅读文档,因此在此介绍一些基本的概念。

command line基本形式

program_name command --option <argument>,如git commit -m <msg>
program_name:执行命令的程序;
command:程序要做的动作/要干什么事;
--option:动作的一些附加选项;
<argument>:这些附加选项的参数信息;

命令中常见的符号

  • <positional argument>:尖括号angle brackets,表示位置参数,即必须要传入值的参数,positional指传入的是哪个参数的值是由位置指定的,因此其都是跟在某个option后面固定位置的;
  • 注意<>只等用来表示参数,不同表示option.
  • [optional option]:方括号square brackets,用来表示可选的选项,放在这里的选项都是可写可不写的。(直接写出来的选项都是必须写的)
  • (required option):圆括号parens,表示必须写的选项的,其和直接把选项写出来的区别是:其通常和|pipe符号连用,表示一组必须要有一个的相斥选项;
  • {default values}:花括号curly braces,用来指定一些默认的值;
  • |:竖线pipe,用来表示一组相斥的选项,即多个选项只能选其一。
  • ---:短杠dash,分为单短杠和双短杠两种,短杠后接参数的简写形式,双短杠则接参数的全称,两种情况是等效的。
    eg. git commit -m <msg>=git commit --message=<msg>

参考博客

docopt(一款命令解析软件的文档)
Command-line syntax: some basic concepts

环境变量/PATH

基本概念

  • 环境变量是指一些列和系统直接相关的变量,其中最常用的为PATH变量(但不仅仅包含PATH),通常来说设置环境变量即为设置PATH变量的意思。
  • PATH变量中存储了一系列路径,输入终端的指令都要到PATH变量包含的路径中,搜索名字匹配的文件来执行。
  • 设置PATH变量的好处:如果不加到PATH变量中,每次执行程序就必须输入程序对应的目录,而将程序的目录加入PATH后,每次就只需要输入程序名就可以了(终端会自己去目录下搜索名字匹配的程序)。

如何修改PATH变量

  • 如何查看:echo $PATH
  • 环境变量格式:字符串形式,”dir1:dir2:dir3”,目录间以分号:分隔。
  • 如何设置环境变量:
    • 修改环境变量对应的文件,只针对当前用户的环境变量,在/Users/user_name/.bash_profil环境中修改;针对所有用户的环境变量:在/etc/profil文件中修改。
    • 设置PATH="{$PATH}:directory_path"
    • 或者直接通过终端执行上述命令也可以。

export命令

设置环境变量:export name=value;显示所有环境变量:export -p
注1: export的效力仅及于该次登陆操作,一旦退出用户,此次登陆就无效了。
注2: export和普通赋值的区别:本质都是对变量赋值,区别在于export的变量,次进程后续产生的子进程也可以访问,但普通赋值的变量就只能对当前的进程起作用。

terminal 操作命令

  • 光标移至行首:ctrl+a
  • 光标移至行尾:ctrl+e
  • 删除一行/结束当前命令:ctrl+c
  • ctrl+d:删除一个字符,如果没有字符的话就相当于发送Eof
  • ctrl+z:挂起当前进程

Shell脚本编写

  • 开头定义解释器环境 #! /bin/bash
  • 定义变量:variable_name=xxx,直接等号赋值即可。注意:等号两边不能有任何空格!
  • 使用变量:${variable_name},美元符号指明这是一个变量,外面的花括号用来指明变量边界(可选)。
  • 脚本保存为:script_name.sh
  • 脚本执行:sh script_name.sh

iterm2 + zsh + oh my zsh 改进终端体验

  • iterm2: 可以理解为mac下terminal的增强版,增加了一些实用的功能,如:分屏、记录命令行历史等。
  • zsh:z shell,是bash的增强版,兼容bash,且进行了一些改进。
  • oh my zsh:是z shell的一个管理工具,可以对zsh进行扩展,功能有:更换zsh主题、对zsh装插件等。

如何切换shell

  • 查看已安装的shell:cat /etc/shells
  • 切换shell:chsh -s /bin/zsh
  • 查看当前shell:echo $SHELL

Post Date: 2019-02-23

版权声明: 本文为原创文章,转载请注明出处