Linux(6)-命令行的使用,history,shell脚本

命令行的使用,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终端是什么)

  1. Ctrl+alt+T 唤醒伪终端(Gnome终端)
  2. Ctrl+alt+F1 唤醒的黑漆漆终端, Ctrl+alt+F7回到图形界面

终端输出

chenyingying@chenyingyingde-Air:~$
// 用户名@计算机名:当前目录$
// $命令提示符,mac的命令提示符为%

bash 执行的操作:

  1. 预留关键字:for、history–自己操作
  2. 命令程序: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命令程序

一般情况下:

  1. 普通用户使用命令存放目录–/bin, /usr/bin, /usr/local/bin
  2. 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脚本

把程序打包

  1. 文本编辑器,编辑shell 脚本,存成xxx.sh的格式
  2. 赋予 脚本可执行权限:

chmod +x ./xxx.sh

  1. 运行脚本(./十分必要)

./xxx.sh

注意:

  1. 脚本文件并不要求特定的扩展名,只要是文本文件,具有可执行的权限即可。一般习惯上将脚本文件扩展名设为.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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lua元表的理解

元表概念 ( Metatable)元表由键名为 事件 (event) 和其中的值叫作元方法 (metamethod)组成。在lua中每个值都有一个元表。而table和userdata所定义的值允许自定义对应的元表,其他都是用统一的元表。我的理解,元表,其实…

程序以及论文

本人长期承接大学计算机专业的毕业设计和论文的编写。 主要开发语言C,C (windows或linux平台皆可),php,c#,VC 。 课题内容可以是 管理系统,可以是 网站设计开发 可以是 网络聊天 可以是 应用…

Github(1)-概览,初始化仓库

Github网页-本地git1.github网页1.1 主要界面1.1.1github主页1.1.2仓库主页1.1.3 个人页面1.2 注册github账号1.3 新建平台仓库2.git-本地仓库2.1 git本地仓库的三个区域2.2 创建一个本地仓库GitHub 本质上是一个代码托管平台,它提供的是基于 Git 的代码托管服务。G…

Lua 协程

Lua里的协程是一个原来没见过的东西,Python的Gevent也是一个基于coroutine的python网络开发框架。性能据说很不错。协同的一个关键特征是它可以不断颠倒调用者与被调用者之间的关系协程和一般多线程的区别是,一般多线程由系统决定该哪个线程执行&#xf…

leetcode16 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如,给定数组 nums [-1,2,1,-4], 和 target 1…

LINUX下动态链接库的使用-dlopen dlsym dlclose dlerror

dlopen 基本定义   功能&#xff1a;打开一个动态链接库 包含头文件&#xff1a; #include <dlfcn.h> 函数定义&#xff1a; void * dlopen( const char * pathname, int mode ); 函数描述&#xff1a; 在dlopen的&#xff08;&#xff09;函数以指定模式打开指定的动…

leecode11 盛水最多的容器

给定 n 个非负整数 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多…

Github(2)-本地配置git

本地配置git1.注册账号2.安装git工具3.配置git 账号1.注册账号 github网页注册github账户 2.安装git工具 本地安装git工具 step1 查看是否安装git git version step2 mac 安装 brew install git step2 linux安装 sudo apt-get install git 3.配置git 账号 创建ssh key, 配置…

lua面向对象编程之点号与冒号的差异详细比较

首先,先来一段在lua创建一个类与对象的代码 Class {}Class.__index Classfunction Class:new(x,y)local temp {}setmetatable(temp, Class)temp.x xtemp.y yreturn tempendfunction Class:test()print(self.x,self.y)endobject Class.new(10,20)object:test() 猜一下会输…

lua __index __newindex upvalue 示例

项目中有个公会对象&#xff0c;数据大部分存在data中&#xff0c;之前都是 u.data.point这样访问&#xff0c;太麻烦了。 于是通过设置__index 使之可以直接访问属性&#xff0c;u.point。 但是还是不能直接改属性&#xff0c;u.point 4&#xff0c;所以再设置了__newindex…

leecode26 删除排序数组中的重复项

给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums [1,1,2…

MachineLearning(6)-Daviad Silver强化学习课程脉络整理

强化学习-Daviad Silver强化学习课程脉络整理1.lecture1 introduction1.1 强化学习简介1.2 强化学习类别1.3 强化学习的主要问题2.lecture2 Markov Decision Process2.1 MP,MRP,MDP2.2 Bellman Eqution--贝尔曼方程2.3 Bellman Eqution--贝尔曼期望方程2.4 最优策略2.5 最优值函…

lua的VS或者VC环境的搭建调试

安装完LuaForWindows_v5.1.4 打开vs tools->options->projects->directories executable files 选项添加lua安装以后的路径,我的是 C:\Program Files\Lua\5.1 include files选项添加lua include路径,我的是 C:\Program Files\Lua\5.1include library files 选项添…

leecode53 最大子序列和

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 思路&#xff1a;…

在页游中LUA的应用(1)

通常,你希望在你的游戏开始的时候读取一些信息,以配置你的游戏,这些信息通常都是放到一个文本文件中,在你的游戏启动的时候,你需要打开这个文件,然后解析字符串,找到所需要的信息。 或许你认为这样就足够了,为什么还要使用Lua呢? 应用于“配置”这个目的,Lua提供给你…

Github(3)-本地文件管理

使用github 托管代码简单使用教程--本地文件管理1.基本概念2.本地文件管理2.1 git add2.2 git status2.3 git commit2.3 git log2.5 git reset --hard 版本回退2.6 git reflog2.7 git diff2.8 git checkout --file 工作区文件恢复2.9 git rm 删除版本库里的文件廖雪峰老师博文学…

linux 中阻塞与非阻塞 同步与异步

简单点说: 阻塞就是干不完不准回来&#xff0c; 非阻塞就是你先干&#xff0c;我先看看有其他事没有&#xff0c;完了告诉我一声。 我们拿最常用的send和recv两个函数来说吧。比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈…

leecode62 不同路径

示例 1: 输入: m 3, n 2 输出: 3 解释: 从左上角开始&#xff0c;总共有 3 条路径可以到达右下角。 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -> 向右 3. 向下 -> 向右 -> 向右 示例 2: 输入: m 7, n 3 输出: 28 思路&#xff1a;太过于简单&#xf…

数据库的查询优化建议整理

从大多数数据库应用系统的实例来看,查询操作在各种数据库操作中所占据的比重最大,而查询操作所基于的SELECT语句在SQL语句中又是代价最大的语句。 查询语句(SELECT)的优化建议 (1)、合理使用索引:where子句中变量顺序应与索引字键顺序相同。 如:create index test_idx…

Github(4)-远程操作

使用github 托管代码简单使用教程--远程操作3.连接本地仓库与远程仓库3.1 git clone 克隆实现链接3.2 git remote add origin4.远程操作4.1 git checkout -b 切换分支14.2 git branch 查看分支4.3 git merge 合并分支4.3.1 step1&#xff1a;切换成主分支4.3.2 step2&#xff1…