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,一经查实,立即删除!

相关文章

程序以及论文

本人长期承接大学计算机专业的毕业设计和论文的编写。 主要开发语言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…

leetcode16 最接近的三数之和

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

leecode11 盛水最多的容器

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

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

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

leecode53 最大子序列和

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

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 删除版本库里的文件廖雪峰老师博文学…

leecode62 不同路径

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

leetcode64 最小路径和

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总…

leetcode300 最长上升子序列

经典题&#xff0c;不解释&#xff0c;可以看我之前文章。 普通dp public class Solution {public int lengthOfLIS(int[] nums) {if (nums.length 0) {return 0;}int[] dp new int[nums.length];dp[0] 1;int maxans 1;for (int i 1; i < dp.length; i) {int maxval …

leecode5 最长回文子串

给定一个字符串 s&#xff0c;找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1&#xff1a; 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2&#xff1a; 输入: "cbbd" 输出: "bb"…

服务器端开发的一些建议

摘要: 本文作为游戏服务器端开发的基本大纲&#xff0c;是游戏实践开发中的总结。第一部分专业基础&#xff0c;用于指导招聘和实习考核&#xff0c; 第二部分游戏入门&#xff0c;讲述游戏服务器端开发的基本要点&#xff0c;第三部分服务端架构&#xff0c;介绍架构设计中的一…

leetcode63 不同路径II

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为“Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为“Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到右下角将…

leetcode55 跳跃游戏 秒杀所有答案

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步&#xff0c;从位置 0 到达 位置 1, 然后再从位置 …

leetcode45 跳跃游戏II 秒杀所有答案

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 …

MachineLearning(7)-决策树基础+sklearn.DecisionTreeClassifier简单实践

sklearn.DecisionTreeClassifier决策树简单使用1.决策树算法基础2.sklearn.DecisionTreeClassifier简单实践2.1 决策树类2.3 决策树构建2.3.1全数据集拟合&#xff0c;决策树可视化2.3.2交叉验证实验2.3.3超参数搜索2.3.4模型保存与导入2.3.5固定随机数种子参考资料1.决策树算法…

leetcode72 编辑距离

给定两个单词 word1 和 word2&#xff0c;计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1: 输入: word1 "horse", word2 "ros" 输出: 3 解释: ho…

即时通讯系统架构

有过几款IM系统开发经历&#xff0c;目前有一款还在线上跑着。准备简单地介绍一下大型商业应用的IM系统的架构。设计这种架构比较重要的一点是低耦合&#xff0c;把整个系统设计成多个相互分离的子系统。我把整个系统分成下面几个部分&#xff1a;&#xff08;1&#xff09;状态…

leetcode303 区域和检索

给定一个整数数组 nums&#xff0c;求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和&#xff0c;包含 i, j 两点。 示例&#xff1a; 给定 nums [-2, 0, 3, -5, 2, -1]&#xff0c;求和函数为 sumRange() sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0,…

网络游戏的客户端同步问题 .

有关位置同步的方案实际上已经比较成熟&#xff0c;网上也有比较多的资料可供参考。在《带宽限制下的视觉实体属性传播》一文中&#xff0c;作者也简单提到了位置同步方案的构造过程&#xff0c;但涉及到细节的地方没有深入&#xff0c;这里专门针对这一主题做些回顾。 最直接的…