命令行的使用,shell脚本
- 1.终端shell,man
- 1.1 Ctrl+r--匹配查找历史命令
- 1.2 history [n] --列出历史命令
- 1.3!--执行历史命令
- 2.shell 编程
- 2.1 shell脚本
- 2.2 注释
- 2.3 指明所用的shell
- 2.4 支持函数
- 2.5 使用变量
- 2.6 解析命令行参数
- 2.7 if, for, case, while
- 2.8 shell脚本中的引号
- 3.bash 发展历史
Linux入门很简单-第六章笔记
1.终端shell,man
Linux 是一个内核,内核管硬件-显卡、声卡、内存、硬盘、硬盘上的程序调度
Shell–将程序猿操作意图转述给内核。其本质是一个二进制程序,路径/bin/bash。
终端负责提供输入命令的交互界面,去环境变量Path中唤醒对应的命令程序,执行具体的操作。
多种多样的shell终端–bash,csh,ksh。
ubuntu 中默认的shell 是bash。(在/etc/passwd文件中会表明默认的shell终端是什么)
- Ctrl+alt+T 唤醒伪终端(Gnome终端)
- Ctrl+alt+F1 唤醒的黑漆漆终端, Ctrl+alt+F7回到图形界面
终端输出
chenyingying@chenyingyingde-Air:~$
// 用户名@计算机名:当前目录$
// $命令提示符,mac的命令提示符为%
bash 执行的操作:
- 预留关键字:for、history–自己操作
- 命令程序:ls、free–去环境变量中找命令程序交由他们来执行
环境变量PATH中记录了bash 找程序的路径,按照该路径列表挨个去找命令程序。 如果报 xxx:command not found, 就需要查看是环境变量中是否存在该命令的bin文件路径。如果没有请设置相应的路径(第12条)
// 查看环境变量的内容,以冒号分割各个路径
echo $PATH
/usr/local/sbin:/usr/local/bin:/Users/chenyingying/anaconda3/bin:/Users/chenyingying/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin
提示:/usr/local目录与/usr目录结构类似,都包含bin,sbin,lib,incud等目录。一般来说/usr中存放从软件源中安装的软件,/usr/local中存放用户用其他方式安装的软件。
/usr/sbin–useradd,gdm,smbd,nmbd 管理级的程序
/usr/bin – 有ls命令程序
一般情况下:
- 普通用户使用命令存放目录–/bin, /usr/bin, /usr/local/bin
- root 用户使用命令存放目录–/sbin, /usr/sbin, /usr/local/sbin
要运行一个二进制程序,而且该程序不在PATH所包含的所有路径中(新下载的安装程序),在运行的时候加上路径即可,bash 就直接去写的路径中找相应的二进制程序了。
./setup.sh // 直接运行该二进制程序
man 命令解说员, 查看命令的作用,按Q键推出解说界面。
pwd- print woking directory --输出当前工作目录
date–打印当前的日期
Linux 软件设计的理念–只做一个功能,但是要做到最好。通过多个程序组合可以实现任何功能。
bash 会将所有的通配符都展开之后再传递给实际的命令。
1.1 Ctrl+r–匹配查找历史命令
按照模糊印象查询历史命令:就用Ctrl+ r 组合键进入历史记录搜寻状态。
键盘输入一个字母,当前命令行就会匹配最接近的命令,
按下enter会执行匹配的命令,按下右键(上下左右方向键中的右键)会进入命令编辑状态
1.2 history [n] --列出历史命令
history [n] n为数字,列出最近的n条命令
history 3 # 显示3条命令
所有的历史命令存在~/.bash_history中,打开该文件可以查看所有的命令
(mac中history 3无效,会显示所有的历史命令)
1.3!–执行历史命令
! number 执行第number条命令
! command 从历史命令中找到最近的以command开头的命令执行
!! 执行上一条命令
参考博文:https://blog.csdn.net/gui951753/article/details/79225429
2.shell 编程
2.1 shell脚本
把程序打包
- 文本编辑器,编辑shell 脚本,存成xxx.sh的格式
- 赋予 脚本可执行权限:
chmod +x ./xxx.sh
- 运行脚本(./十分必要)
./xxx.sh
注意:
- 脚本文件并不要求特定的扩展名,只要是文本文件,具有可执行的权限即可。一般习惯上将脚本文件扩展名设为.sh
2.2 注释
shell 脚本的注释用#号
2.3 指明所用的shell
shell 脚本文件第一行说明使用的shell (有点类似于解释器的说明)
#!/bin/bash
也可以直接在运行脚本程序时显式指定
bash xxx.sh
2.4 支持函数
有一段代码需要在脚本里使用执行多次,可以将其写成一个函数直接调用。Bash中的函数是没有参数列表, 参数按照位置传递的,而且自动给出变量名称,例如$1就表示第一个参数,当然$2就是第二个参数,参数之间用空格区分。
#!/bin/bash
# shell 脚本函数使用dmeo
function parse() { # 定义函数echo "$0"echo "$1" # 传达给函数的第一个参数
}
parse $1 # 调用函数,不需要写小括号
parse $2# 运行脚本------
bash test.sh 123 321# 脚本输出------
test.sh
123
test.sh
321
2.5 使用变量
shell 中的变量类型只有字符串
#!/bin/bash
value=128
echo value
echo $value # 取变量的值,否则直接使用'value'字符串
player1=YOGA # 似乎空格符号都不能用,./shell_test.sh: line 5: YOGA: command not found
player2=KEN
echo ${player1}vs${player2}
算术运算
num=8
num=$num+1
echo $num
num=8
num=`expr &num+1`
echo $num
输出
8+1
./shell_test.sh: line 12: num+1: command not found
expr: syntax error
环境变量–在整个系统运行中都有效的变量.例如PATH,$HOME-当前用户的家目录,$TZ-本系统所在的时区,
可以通过export 让一个用户变量,变成全局变量(环境变量在当前会话结束后失效)
# mac zsh没有设置全局变量成功
export num=8
echo $num
2.6 解析命令行参数
参考
可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。其中 $0 为执行的文件名。
./extract_cyy.sh 123 # 在编写bash 脚本时, 123 可以通过$1获取
2.7 if, for, case, while
该有的它都有,不过我觉得…应该不会大量用到shell编程吧
(此处略,被虐了再回来补好吧)
if语句的基本语法如下, 条件判断可以包括:字符串的判断, 数值的判断, 文件和目录的判断, 复杂逻辑判断
if [ command ];then符合该条件执行的语句
elif [ command ];then符合该条件执行的语句
else符合该条件执行的语句
fi
参考文档: shell 语言中的 if 条件判断
2.8 shell脚本中的引号
Shell脚本中,经常会使双引号或者单引号将字符串括起来,也可以不使用引号来定义字符串变量。
单引号是全引用, 变量不替换。被单引号括起的内容不管是常量还是变量都不会发生替换。
双引号是部分引用,变量替换。被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。如果双引号中有命令、变量等,会先把变量、命令解析出结果。
无引号 定义字符串时,字符串不能包含空白字符(如Space或Tab)。
反引号 命令替换,通常把命令输出结果保存在变量中, 如果命令不用反引号包含,那么命令不会执行,而是直接输出。
var=dablelv
echo '$var' # 输出:$var 原样输出单引号里的内容
echo "$var" # 输出:dablelv 先进性变量取值操作,然后在echo该值
echo `ls`
参考文档:Shell 双引号和单引号的区别
3.bash 发展历史
Thomp Shell-Ken Thompson-Unix操作系统接口界面,用来与人类交流。
Bourne Shell-Steve Bourne-加入控制流的shell–成为后来的Unix 标准shell。
Bourne Again Shell-Brain Fox-就是后来的bash,完善了Bourne Shell。