1、检查 /etc/shells 这个文件可以得到有多少可用的shell,一般有一下几个:

  • /bin/sh (已经被 /bin/bash 所取代)
  • /bin/bash (就是 Linux 默认的 shell)
  • /bin/ksh (Kornshell 由 AT&T Bell lab. 发展出来的,兼容于 bash)
  • /bin/tcsh (整合 C Shell ,提供更多的功能)
  • /bin/csh (已经被 /bin/tcsh 所取代)
  • /bin/zsh (基于 ksh 发展出来的,功能更强大的 shell)

Linux 默认就是使用 bash 。

为什么我们系统上合法的 shell 要写入 /etc/shells 这个文件?

因为系统某些服务在运行过程中,会去检查使用者能够使用的 shells ,而这些 shell 的查询就是通过 /etc/shells 这个文件。

当登陆的时候,系统就会分配个 shell 来工作。 而这个登陆取得的 shell 记录在 /etc/passwd 这个文件内。

2、~/.bash_history 记录的是前一次登陆以前所运行过的命令, 而至于这一次登陆所运行的命令都被缓存在内存中,当你成功的注销系统后,该命令记忆才会记录到 .bash_history 当中。

3、

  • [Tab] 接在一串命令的第一个字的后面,则为命令补全;
  • [Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!

4、命令别名配置功能: (alias)

命令行输入 alias 就可以知道目前的命令别名有哪些。

可以直接下达命令来配置别名:

alias lm='ls -al'

5、除了完整的字符串之外, bash 还支持许多的通配符来帮助用户查询与命令下达。

举例来说,想要知道 /usr/bin 底下有多少以 X 为开头的文件,可以使用:『 ls -l /usr/bin/X* 』

6、怎么知道某个命令是来自于外部命令(指的是其他非 bash 所提供的命令) 或是内建在 bash 当中?

利用 type 这个命令来观察即可, type 也可以用来作为类似which命令的用途:找命令

7、命令太长时可以用 \[Enter]  使命令换行继续输入。

8、下达 ls 这个命令时,系统就是透过 PATH 这个变量里面的内容所记录的路径顺序来搜寻命令。如果在搜寻完 PATH 变量内的路径还找不到 ls 这个命令, 会在屏幕上显示『 command not found 』的错误信息。

9、为了区别与自定义变量的不同,环境变量通常以大写字符来表示。

10、可以利用 echo 这个命令来取用变量。变量在被取用时,前面必须要加上$

11、用『等号(=)』连接变量与他的内容可以配置或修改某个变量

12、

  • 变量与变量内容以一个等号『=』来连结,如下所示:『myname=VBird』
  • 等号两边不能直接接空格符,如下所示为错误: 『myname = VBird』或『myname=VBird Tsai』
  • 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 『2myname=VBird』
  • 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;
      • 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:
        『var="lang is $LANG"』则『echo $var』可得『lang is en_US』
      • 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:
        『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』
  • 在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。 例如想要取得核心版本的配置:
    『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』
  • 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:
    『PATH="$PATH":/home/bin』
  • 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:
    『export PATH』
  • 通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (非强制规定) ;
  • 取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:『unset myname』

13、在一串命令中,在 ` 之内的命令将会被先运行,而其运行出来的结果将做为外部的输入信息

14、用env 与 export 可以查看该shell环境下所有的环境变量。

15、set 除了环境变量之外, 还会将其他在 bash 内的变量通通显示出来。

16、变量“?”代表上一个运行的命令所回传的值。

当我们运行某些命令时, 这些命令都会回传一个运行后的代码。一般来说,如果成功的运行该命令, 则会回传一个 0 值,如果运行过程发生错误,就会回传『错误代码』

17、export: 自定义变量转成环境变量。因为子程序仅会继承父程序的环境变量, 子程序不会继承父程序的自定义变量。

那如何将环境变量转成自定义变量呢?可以使用declare。

18、变量的有效范围:我们在上头的export命令说明中,就提到了这个概念了。如果在跑程序的时候,有父程序与子程序的不同程序关系时, 则『变量』可否被引用与 export 有关。被 export 后的变量,我们可以称他为『环境变量』! 环境变量可以被子程序所引用,但是其他的自定义变量内容就不会存在于子程序中。

19、要读取来自键盘输入的变量,使用 read 这个命令

read [-pt] variable
选项与参数:
-p :后面可以接提示字符!
-t :后面可以接等待的『秒数!』这个比较有趣~不会一直等待使用者啦!

20、declare 或 typeset 是一样的功能,就是在『宣告变量的类型』。如果使用 declare 后面并没有接任何参数,那么 bash 就会主动的将所有的变量名称与内容通通叫出来,就好像使用 set 一样啦!

declare [-aixr] variable
选项与参数:
-a :将后面名为 variable 的变量定义成为数组 (array) 类型
-i :将后面名为 variable 的变量定义成为整数数字 (integer) 类型
-x :用法与 export 一样,就是将后面的 variable 变成环境变量;
-r :将变量配置成为 readonly 类型,该变量不可被更改内容,也不能 unset 范例一:让变量 sum 进行 100+300+50 的加总结果
[root@www ~]# sum=100+300+50
[root@www ~]# echo $sum
100+300+50 <==咦!怎么没有帮我计算加总?因为这是文字型态的变量属性啊!
[root@www ~]# declare -i sum=100+300+50
[root@www ~]# echo $sum
450

21、

  • 变量类型默认为『字符串』,所以若不指定变量类型,则 1+2 为一个『字符串』而不是『计算式』。 所以上述第一个运行的结果才会出现那个情况的;
  • bash 环境中的数值运算,默认最多仅能到达整数形态,所以 1/3 结果是 0;

22、如果需要非字符串类型的变量,那就得要进行变量的宣告才行

23、

将 sum 变成环境变量
[root@www ~]# declare -x sum
让 sum 变成非环境变量的自定义变量吧!
[root@www ~]# declare +x sum <== 将 - 变成 + 可以进行『取消』动作

24、数组 (array) 变量类型

范例:配置上面提到的 var[1] ~ var[3] 的变量。
[root@www ~]# var[1]="small min"
[root@www ~]# var[2]="big min"
[root@www ~]# var[3]="nice min"
[root@www ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"
small min, big min, nice min

25、变量内容的删除:#和## 从前面开始删除, %和%%从后面开始删除

  • # :符合取代文字的『最短的』那一个;
  • ##:符合取代文字的『最长的』那一个;

26、

${变量/旧字符串/新字符串}

${变量//旧字符串/新字符串}

若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串取代』

若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串取代』

27、在某些时刻我们常常需要『判断』某个变量是否存在,若变量存在则使用既有的配置,若变量不存在则给予一个常用的配置。

new_var=${old_var-content}

28、

变量配置方式 str 没有配置 str 为空字符串 str 已配置非为空字符串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr
var=expr
str 不变
var=
str 不变
var=$str
var=${str:=expr} str=expr
var=expr
str=expr
var=expr
str 不变
var=$str
var=${str?expr} expr 输出至 stderr var= var=$str
var=${str:?expr} expr 输出至 stderr expr 输出至 stderr var=$str

这个减号的测试并不会影响到旧变量的内容。 如果你想要将旧变量内容也一起替换掉的话,那么就使用等号 (=) 吧!

29、history查看历史命令,!number运行响应序号的命令,!!运行上一个命令。

Linux-shell学习笔记1的更多相关文章

  1. Linux Shell 学习笔记 一 目录结构

    以Red Hat Enterprise Linux 各版本为例,RHEL中目录具体作用如下, /bin       存放普通用户使用的命令 /sbin     存放管理员可以执行的命令 /home   ...

  2. linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  3. Linux & Shell 学习笔记【1/2】

    因为工作上的需要,花了些许时间去熟悉学习Linux和Shell,现在也花点事件在此记录一下以加强巩固学习的内容吧.学的不算深入,所以都是一些比较junior的内容. 在下一篇随笔会详述之前写的一个用于 ...

  4. Linux Shell 学习笔记

    2.return与exit区别 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是 ...

  5. Linux Shell学习笔记:exit退出状态代码

    inux提供$?特殊变量来保存最后一条命令执行结束的退出状态.执行完一条命令后,立即执行echo$?,可以查看最后一条命令的退出状态值. 正常的情况下,命令成功执行完成的退出状态是0,如果非0,则命令 ...

  6. Linux Shell学习笔记(一)

    Shell,见名知意,就是一个作为用户与Linux OS间接口的程序,允许用户向OS输入需要执行的命令.Shell众多,这里只介绍Bash. 0)实验的Shell版本 显示shell版本: /bin/ ...

  7. linux shell 学习笔记--内部命令学习

    .基本命令 新手必须要掌握的初级命令 ls 基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如 ,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, ...

  8. linux shell学习笔记

    一  变量 声明变量: my_var='ddd'使用变量: ${my_var}设置为只读变量: readonly my_var删除变量: unset my_var 注意只读变量不能被删除 变量类型:( ...

  9. linux shell 学习笔记01

    1.命令历史记录history !$     :调用上一条命令的执行结果 !100   :运行history记录里的第100条命令 !ser   :调用以ser开头的最后一次执行的命令 ctrl+r  ...

  10. Linux Shell 学习笔记 00

    1.Bash = Bourne Again SHell 2.终端提示符: #普通用户 username@hostname$ #管理员用户 root@hostname# 3.shell脚本通常是一个以s ...

随机推荐

  1. iOS:bugly符号表上传

    https://blog.csdn.net/weixin_38633659/article/details/81667721 这个篇文章已经讲得足够清楚 而且官方的文档也写得很好(注意官方网站上的文档 ...

  2. QForkMasterInit: system error caught. error code=0x000005af, message=VirtualAllocEx failed.(遇到还没试过)

    今天在使用Redis的时候出现以下错误: QForkMasterInit: system error caught. error code=0x000005af, message=VirtualAll ...

  3. WebShell代码分析溯源(四)

    WebShell代码分析溯源(四) 一.一句话变形马样本 <?php @$_++;$__=("`"^"?").(":"^"} ...

  4. MTDDL 美团分布式数据访问中间件(转)

    MTDDL 美团分布式数据访问中间件(转) 原文地址:MTDDL--美团点评分布式数据访问层中间件 因原文文字和图显示有问题,故整理于此,仅供参考. 业界方案 组件 简介 Atlas Qihoo 36 ...

  5. 利用openssl自建CA体系

    使用 OpenSSL 创建私有 CA:1 根证书 使用 OpenSSL 创建私有 CA:2 中间证书 使用 OpenSSL 创建私有 CA:3 用户证书 今天跟着上面的三部曲,做了一下openssl的 ...

  6. svn忽略文件不提交至服务器的方法

    在提交界面,右键加入忽略提交列表.可以实现忽略本地文件不提交,且不删除服务器上的文件.

  7. RabbitMQ几个常用面试题

    以下观点,仅为个人理解的总结,如有错漏,欢迎指正! -------------------------------------------------------------------------- ...

  8. 修改项目语言为C#8.0

    错误 CS8370 功能“Using 声明”在 C# 7.3 中不可用.请使用 8.0 或更高的语言版本.  用记事本打开项目文件 XXX.csproj,找到LangVersion,修改为8.0. 如 ...

  9. ReactNative: 使用滚动视图ScrollView组件

    一.简介 当页面内容的非常多时,即使换行后仍然无法充分显示,此时最好的解决办法就是让页面可以滚动显示.在React-Native中,提供了可供滚动的视图组件ScrollView组件.它的属性和方法以及 ...

  10. 如何使redis中存放的都是热点数据?

    当redis使用的内存超过设置的最大内存时,会触发redis的key淘汰机制,在redis3.0中的6中淘汰策略如下: (1)noeviction :不删除策略.当达到最大内存限制时,如果需要使用更多 ...