Shell几个重点解释

#! /bin/bash 脚本解释器,特定约定
# 注释
$a 值替换,`if [-n "$a"]` 替换变量a的值到字符串中进行比较
'' 单引号,字符串限定,内部的内容不进行解析,只当作普通字符串
"" 双引号,内部的内容不能识别命令,只进行变量的解析`$a`
`` 反斜单引号(倒引号),内部命令会当作shell指令执行,然后组合其他字符组成最后的字符串。`test=`date +%F`; echo "Tody $test";`
\ 转义字符,与C类似
{} 大括号,与$配合来连接字符串。`$a; ${a};` 一般是等价的。
() 小括号,命令组,命令替换,初始化数组
[] 中括号,一般用来进行流控,`if []; then fi`
; 分号,同一行的不同语句,与C类似。
= 变量定义,等号两边不能有空格。`a="abc"`由于变量使用弱类型,所以`a=xyz; a='xyz'; a="xyz";`表达的结果一致。如果式数字,不使用引号但是有单引号双引号等的区别,建议一般情况时使用双引号,防止出现意外的结果。变量赋值时,不用加引号`a="123"; b=a;`变量获取`v1=$(pwd); v2=`pwd`; `
unset v1; 删除变量$0 当前脚本文件名
$n(n>=1) 传入脚本/函数的第n个参数
$# 传入的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$@ 与$*类似,一般加双引号, 但是它将每个参数单独显示,而$*把所有参数当作一个显示
$? 显示最后命令的退出状态或者函数的返回值,0表示没有错误
$$ 脚本运行的当前进程号${#a} 获取字符串a的长度
${a:1:2} 字符串a第二哥开始,长度为2的子字符串a=("1" "3" "a") 定义一个数组,空格为分隔符
${a[1]} / ${a[@]} / ${a[*]} 获取数组的元素
${#a[@]} 获取数组长度:<<EOF
这里是注释内容
EOF也可以是其他字符,比如!
EOF`read -p "please input a number to var1:" var1`读取控制台输入到变量
`[$a == $b]`条件运算符,方括号,并且中间必须使用空格,支持`+,-,*,/,%,=,==,!=`
`-a` 与运算,`-o` 或运算, `!` 非运算,`&&` and运算, `||` or运算
`[$a -eq $b]  /  test $a $b -eq` 一般性的比较判断,支持`-eq, -ne, -gt, -lt, -ge, -le`
`[-z str]` 字符串为空 true, `[-n str]`字符串不为空true
`a=$((a1*a2)); a=`expr a1 + a2`;` 计算表达式`-d filename` 目录并且存在,
`-f filename`文件并且存在,
`-e filename`文件是否存在
`-r filename`文件是否可读
`-w filename`文件是否可写
`-x filename`文件是否可执行
`-b filename`文件是否块设备
`-c filename`文件是否字符设备关于逻辑判断的符号:
[ ] :  中括号旁边和运算符两边必须添加空格 (可以使用,不推荐)
[[ ]]: 中括号旁边和运算符两边必须添加空格 (字符串验证时,推荐使用)
(()) : 中括号旁边和运算符两边必须添加空格 (数字验证时,推荐使用)## 以下都支持 break和continueif []; then
# case
elif
# case
else
# case
ficase $a in
1)# case 1;;
2) # case 2;;
*)# default case;;
esacfor v1 in {1..5}; do# 如果使用$@,$*作为items, 命令加上双引号,效果式不同的echo v1
donewhile $a; do
# case
done# 函数声明
function  name (){action;[return int;] #可加可不加
}

环境变量

Shell中存在三种变量:

  1. 局部变量,脚本中定义使用的
  2. Shell变量,shell程序自己设定的特殊变量
  3. 系统环境变量,是由操作系统提供,在shell启动时,加载到shell变量中。

按变量的 生存周期 来划分:

  • 永久环境变量:在环境变量脚本文件中配置,变量永久生效,用户每次登录时会自动执行这些脚本。
  • 临时环境变量:在 Shell 中临时定义的,使用 export 命令声明,变量在关闭 shell 时失效。

按变量的 生效范围 来划分:

  • 系统环境变量:公共的,对全部的用户都生效。
  • 用户环境变量:用户私有的,只对该用户生效。

一些常用的环境变量:

PATH :可执行程序的搜索目录,决定了shell 将到哪些目录中寻找命令或程序
HOME :当前用户主目录
USER :当前登录用户的用户名
HISTSIZE  :保存历史命令的数目
LOGNAME :当前用户的登录名
HOSTNAME :指主机的名称
SHELL :当前用户 Shell 解析器
LANG :Linux系统的语言、地区、字符集
LANGUGE  :语言相关的环境变量,多语言可以修改此环境变量

在 Linux 中,与环境变量有关的文件如下:

  • 全局配置
  • /etc/profile
    全局配置,所有用户登录时都会读取该文件。
    登录用户以后重新打开终端吗,这个/etc/profile不会再执行。意思就是登录以后临时在这个文件里面添加的变量,需要重启重启生效或者手动执行 source /etc/profile
  • /ect/bashrc
    全局配置,所有用户登录时都会读取该文件,该文件配置的环境变量将会影响全部用户使用的bash shell ,不管是何种方式执行 bash ,都会读取此文件。
    Ubuntu没有此文件,与之对应的是/ect/bash.bashrc
    登录用户以后重新打开终端吗,这个/ect/bash.bashrc还会执行。开一次终端就执行一次,意思就是登录以后临时在这个文件里面添加的变量,重新打开终端就能立即生效。
  • /etc/profile.d目录
    /etc/profile在每次启动时会执行 /etc/profile.d下全部的脚本文件。
  • 用户配置
  • ~/.profile
    当前用户登录的时候执行,若 bash 是以 login 方式执行时,读取~/.bash_profile,若它不存在,则读取 ~/.bash_login,若前两者不存在,读取~/.profile
    另外,图形模式登录时,此文件将被读取,即使存在~/.bash_profile~/.bash_login
    登录用户以后重新打开终端吗,这个~/.profile不会再执行,同上面/etc/profile类似理解。
  • ~/.bash_login
    若 bash 是以 login 方式执行时,读取~/.bash_profile,若它不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile
  • ~/.bash_profile
    当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
    只有 bash 是以 login 形式执行时,才会读取此文件。通常该配置文件还会配置成去读取~/.bashrc
    Ubuntu 没有此文件。
  • ~/.bashrc
    当用户登录时以及每次打开新的Shell时该文件都将被读取。
    当 bash 是以 non-login 形式执行时,读取此文件。若是以 login 形式执行,则不会读取此文件。
    登录用户以后重新打开终端吗,这个~/.bashrc还会执行。开一次终端就执行一次,同上面/ect/bashrc类似理解。
  • ~/.bash_logout
    当每次退出系统(退出bash shell)时执行该文件。
    注销时,且是 longin 形式,此文件才会读取。也就是说,在文本模式注销时,此文件会被读取,图形模式注销时,此文件不会被读取。

shell 执行顺序

根据不同的登录模式,Shell 的执行顺序也有一定的区别,一般情况如下:

  1. 图形模式登录:/etc/profile —>~/.profile
  2. 图形模式登录后,打开终端时,读取顺序:/etc/bash.bashrc—>~/.bashrc
  3. 文本模式登录时:/etc/bash.bashrc—>/etc/profile—>~/.bash_profile
    凡是读取到~/.bash_profile的,若该文件不存在,则读取~/.bash_login,若前两者不存在,读取~/.profile

❤️ 结合我们上面的文件程序,我们可以得出来,在我使用的虚拟机 Ubuntu 上的 Shell 脚本执行顺序为:

/etc/profile—>/etc/bashrc—>/etc/profile.d—>~/.profile—>~/.bashrc

dpkg 工具

dpkg 工具,Ubuntu 底层的包管理工具,主要用于对已下载到本地和已经安装的deb包进行管理。

这个工具记住他的使用就可以,他的常用命令如下:

安装软件: dpkg -i xxxx.deb
查看安装目录:dpkg -L xxxx   #使用此命令不需要加.deb后缀,下面没有后缀的相同
显示版本:dpkg -l xxxx
查找包的详细信息:dpkg -s xxxx
列出deb包的内容:dpkg -c xxxx.deb
卸载软件(保留配置):dpkg -r xxxx
卸载软件(不保留配置):dpkg -P xxxx
解开 deb 包的内容 :dpkg –unpack xxxx.deb
配置包:dpkg –configure xxxx

apt 是新版的包管理工具,解决apt-get命令过于分散的问题。
简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。
apt 可以看作 apt-get 和 apt-cache 命令的子集, 可以为包管理提供必要的命令选项。
apt-get 命令同上面 dpkg 一样记住使用就可以,他的常用命令如下:

更新源文件,并不会做任何安装升级操作:apt-get update
升级所有已安装的包 :apt-get upgrade
安装指定的包:apt-get install packagename
仅升级指定的包:apt-get install packagename --only-upgrade
重新安装包:apt-get install packagename --reinstall
修复安装:apt-get -f install
安装相关的编译环境:apt-get build-dep packagename
下载该包的源代码:apt-get source packagename
升级系统:apt-get dist-upgrade
使用 dselect 升级:apt-get dselect-upgrade
删除包(不删除配置文件) :apt-get remove packagename                 
删除包(删除配置文件):apt-get remove packagename -- purge
清理无用的包:apt-get clean
清理无用的包:apt-get autoclean
检查是否有损坏的依赖:apt-get check
查询指定的包 :apt-cache search packagename                  
显示包的相关信息:apt-cache show packagename
使用该包依赖哪些包:apt-cache depends packagename
查看该包被哪些包依赖:apt-cache rdepends packagename

磁盘管理

`df -h -T` 输出硬盘使用状况和类型
`du -h --max-depth=1` 查看文件夹下文件夹大小
`lsblk` 列出所有磁盘情况
`fdisk -l` 打印硬盘硬件详细信息
`cat /proc/partitions` 查看磁盘分区blocks

Linux Shell相关记笔记相关推荐

  1. 《Linux Shell编程学习笔记之一》

    <Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...

  2. Linux Shell编程学习笔记(4)

    Linux Shell编程学习笔记(2015-7-20) 分类:linux shell   今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...

  3. Linux Shell编程学习笔记(2)

    Linux Shell编程学习笔记(2015-7-12) 分类:linux shell Shell变量 一:关于Shell变量   Shell是一种弱类型的语言,变量存储的一切值都是字符串.Shell ...

  4. Linux Shell编程学习笔记(3)

    Linux Shell编程学习笔记(2015-7-19) 分类:linux shell 一:位置参数和特殊变量   什么是位置参数?   位置参数也叫位置变量,是运行shell脚本程序时,命令行she ...

  5. linux/shell相关知识点

    阿里Linux Shell脚本面试25个经典问答 Linux运维工程师12道面试题整理 感谢作者分享!

  6. Linux Shell 编程学习笔记(1)

    Linux Shell编程学习笔(2015-7-11) 一:Shell程序运行的三种方法 赋予程序文件可执行权限,直接运行   比如:chmod a+x shell.sh 使用命令解释器(即shell ...

  7. linux读取环境变量替换,linux Shell脚本学习笔记二(变量和环境变量)

    2.变量和环境变量 使用env命令在终端中查看所有与此终端进程相关的环境变量.对于每个进程,在起运行时的环境变量可以使用下面的命令来查看: cat /proc/$PID/environ 其中,将PID ...

  8. Linux Shell编程学习笔记

    1./是根目录,文件夹目录应该是/home/用户名.shell文件只能保存在文件夹中而不能保存在根目录中,可能是没有进入root. 进入root方法:终端输入 sudo su. 运行shell文件方法 ...

  9. Linux Shell编程学习笔记一:shell简介

    Q:什么是Shell,什么是shell脚本? A:Shell是一种用C语言编写的程序,它是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作 ...

最新文章

  1. 公告:Rover's Official Blog停止更新
  2. Oracle中判断空游标的方法
  3. python内置函数用来打开或创建文件_2020年《python程序设计》基础知识及程序设计598题XS[含参考答案]...
  4. java gc 触发_Java GC种类和触发时机
  5. RabbitMQ之监控(1)
  6. python音频 降噪_一种基于深度神经网络的音频降噪方法技术
  7. Service Worker 学习笔记
  8. 如何使虚拟机VMware workstation连接局域网
  9. ERROR: Cannot uninstall ‘wrapt‘. It is a distutils installed project and thus we cannot accurately d
  10. 无穷小微积分词汇索引怎么使用?
  11. Word2019建立自己的模板
  12. Adobe 系列软件中英文版本的切换
  13. VirtualBox:无法访问共享文件夹
  14. Apache Flink之架构概述和环境(章节一)
  15. 微信抢红包小练习 Python实现
  16. sessionStorage存储数据和取数据
  17. “战术竞技类”外挂打击已开始!揭秘腾讯We Test游戏安全服务新动作!
  18. (转)14个值得推荐的提升个人能力的方法
  19. audio标签报错:DOMException: The play() request was interrupted by a new load request.
  20. 调问开源问卷系统(DWSurvey)详细部署教程(手把手教程)

热门文章

  1. java反转函数_在JAVA中,下列哪个函数可用于字符串的反转?
  2. 课题申请的技术指标是什么
  3. python 全栈开发,Day43(python全栈11期月考题)
  4. [IOS] Storyboard全解析-第二部分
  5. 大数据数据湖之hudi
  6. 计算机高中期末总结作文,期末考试总结作文(精选5篇)
  7. 快速写出高质量IEEE论文的经验总结
  8. dns设置快速连接微软服务器,通过批处理快速设置windows网卡地址网关DNS
  9. 数据的封装与解封装:TCP/IP五层协议
  10. 网页动态效果——随鼠标移动的动态触击式线条