shell学习记录

shell简介

参考博文1

参考博文2——shell语法及应用

参考博文3——vi的使用

linux中有很多类型的shell,不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是 / b in/ b a s h  ,流行的shell有ash、bash、ksh、csh、zsh等

#!/bin/bash			#这一行被称为shebang 行	[指定告知系统当前这个脚本要使用的shell解释器]

(1)vi的使用

(1)控制光标移动方向:hjkl分别对应:左下上右

(2)光标每次移动一个单词:w(word):向后移动一个单词;b(back):向前移动一个单词

(3)移动到指定行:gg:移到文件顶部;G:移到文件末尾 ;数字gg /G /:数字:移动到对应行数,如:5gg

(4)屏幕移动:Ctrl+b:向上翻页 ; Ctrl+f:向下翻页; H / M / L:屏幕顶部/中间底部

(5)标记行:mx(x可取任意字母),跳转到标记行`x;如:标记行使用ma,则跳转到标记行使用`a

(7)撤销 / 恢复上一次命令:u / ctrl + r

(8)选中文本:v / V / ctrl + v:从光标位置开始按照正常模式选择文本 / 选中光标经过的完整行 / 垂直方向选中文本

(9)复制文本:y (复制) ;yy (复制1行,nyy复制多行) ; p (粘贴)

(10)删除文本: x /  d / dd / D

vi test.py +n   #n为行数  ,#打开文件,定位到指定行数,即可进行编辑

如果 vi 异常退出,在磁盘上可能会保存有 交换文件

下次再使用 vi 编辑该文件时,会看到以下屏幕信息,按下字母 d 可以 删除交换文件 即可

1.shell脚本的写入和运行

1.写入的4种方式

shell脚本的写入方式
1.cat > test.sh
"hello world"
"hello boys"   #键入写入test.sh的内容,写完后按CTRL+D退出2.echo "hello world" > test.sh  #写入test.sh并覆盖原有内容
3.echo "hello world" >> test.sh  #写入test.sh的末尾,不覆盖原有内容
4.vi test.sh     #使用vi编辑

注意执行前先给shell脚本可执行的权限:chmod +x test.sh(最开始创建的test.sh只是一个文本文件,必须给权限后才可运行)

#3种方式均可运行sh脚本
bash test.sh  
sh test.sh
./test.sh      #注意!!! 不可忽略./

2.输入/输出重定向

linux标准输入输出:

0:键盘(/dev/stdin)——标准输入

1:显示器(/dev/stdout)——标准输出

2:显示器(/dev/stderr)——标准错误输出

输入重定向:不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备。(使用 “<”符来修改标准输入设备)

echo "today is $(date)"    #输出Today id 2024年 05月 20日 星期一 14:26:59 CST
echo " today is $(date)" >> test.sh   #将输出内容写到test.sh文件的末尾

常用的转义字符:\n:换行        \t:制表符        \\反斜杠        \" 双引号       \'单引号

3.shell变量

注意事项!!!

1.等号两侧不能有空格,如:name="john"

2.环境变量建议大写

3.单引号(全引用):单引号括起的内容不管是常量还是变量都不会发生替换(引用的即输出的)

4.双引号(部分引用):变量发生替换,常量保持不变

5.无引号:字符串不能包含空白字符(space/tab),一般连续的字符串、数字、路径等可以不加引号

字符串常量使用单引号括起来,如果字符串含有变量命令等使用双引号括起来,不建议不加引号

命令执行:必须用反引号(`命令`)或$(命令):如:echo `ls` 或者echo $(ls)  ,才会输出ls命令执行结果(也即显示当前目录下的文件)

#单引号使用
var=double
echo '$var'     #输出:$var#双引号使用
var=double
echo "$var"    #输出:double#无引号使用
str1="test1",str2='test2',str3=teststring
echo $str1,$str2,$str3     #输出test1,str2=test2,str3=teststring

3.1变量分类

1.自定义变量:户自由定义变量名和变量的值

2.环境变量:保存和系统操作环境相关的数据

3.位置参数变量:向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。

4.预定义变量:Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

#变量的调用
[root@root scripts]# name="shen zhen"
[root@root scripts]# echo $name
shen zhen

3.2变量查看

set指令能设置所使用shell的执行方式,可依照不同的需求来做设置。

set [+-abCdefhHklmnpPtuvx]unset name    #删除变量
env            #查看系统默认环境变量
 3.2.1位置参数变量

$n: n为数字,$0表示当前 Shell 脚本程序的名称,$1-9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 ,如{10}

$*:代表命令行中所有的参数,$把所有的参数看成一个整体

$@:代表命令行中所有的参数,不过$@把每个参数区分对待

$#:代表命令行中所有参数的个数

#! /bin/bashecho "shell脚本本身的名字:$0"     #输出:shell脚本本身的名字:test.sh
echo "传给shell的第一个参数:$1"    #输出:传给shell的第一个参数:1
echo "传给shell的第二个参数:$2"    #输出:传给shell的第二个参数:2
3.2.2预定义变量

$?:  最后一次执行命令的返回状态。为0则命令执行成功,反之,不成功

$$:  当前进程的进程号PID

$!:  后台运行的最后一个进程的进程号

1.cat:用于查看和连接文件

'>'用于创建文件, '>>'用于追加内容(不覆盖原内容)

cat file  #查看文件
cat > test.py # 将标准输入到重定向文件,覆盖该文件内容
cat >> test.py #将标准输入写到文件末尾cat file1 file2 > file3  #将file1和file2的内容合并写到file3(若file3有内容,则会被覆盖)
cat file1 file2 > file3  #将file1和file2的内容合并写到file3(若file3有内容,则会写到文件后)cat file1 file2    #显示多个文件内容
cat filename | command  #将cat命令的输出作为另一个命令的输入
cat -n textfile1 > textfile2  # textfile1 的文档内容加上行号后输入 textfile2 
cat filename | tail -n 10  #显示file的最后10行nl filename      #显示行号(包括空白行)
cat -n filename  #显示行号(包括空白行)   
cat -b filename  #显示行号(不包括空白行)
cat -e filename  #在每行结尾处添加符号"$"cat /dev/null > /etc/tsst.txt  #清空 /etc/test.txt 文档内容
cat /dev/fd0 > OUTFILE    #制作镜像文件,如要制作 软盘的镜像文件OUTFILE,将软盘放好后,使用此命令
cat /IMG_FILE > /dev/fd0   #相反的,如果想把 image file镜像文件 写到软盘,使用此命令

2.more 文件内容或输出查看工具

more /root/test.py     #查看文件内容,同cat,并可分页显示文件内容参数如下:+num   从第num行开始显示;-num   只显示前num行;+/pattern   从pattern 前两行开始显示;-c   从顶部清屏然后显示;-d   提示Press space to continue, 'q' to quit.(按空格键继续,按q键退出),禁用响铃功能;-l    忽略Ctrl+l (换页)字符;-p    通过清除窗口而不是滚屏来对文件进行换页。和-c参数有点相似;-s    把连续的多个空行显示为一行;-u    把文件内容中的下划线去掉退出more的动作指令是qmore -dc test.sh     #清屏查看当前文件
ls -l /etc |more     #通过管道与more结合(当要显示的内容很多时,cat直接打印了所有内容,可能会看不到前面部分的内容,就可利用more分屏显示)#查看大文件时,有以下常用快捷键:Enter:    向下1行(默认,可修改多行)Ctrl+f:   向下滚动1屏;空格键:    向下滚动1屏;Ctrl+b:   返回上一屏;= :       输出当前行的行号;:f:       输出文件名和当前行的行号;v:        调用vi编辑器;! :       调用Shell,并执行命令;q :       退出more当我们查看某一文件时,想调用vi来编辑它,不要忘记了v动作指令,这是比较方便的;

3.less查看文件

less test.sh
常用参数-c 从顶部(从上到下)刷新屏幕,并显示文件内容。而不是通过底部滚动完成刷新;
-f 强制打开文件,二进制文件显示时,不提示警告;
-i 搜索时忽略大小写;除非搜索串中包含大写字母;
-I 搜索时忽略大小写,除非搜索串中包含小写字母;
-m 显示读取文件的百分比;
-M 显法读取文件的百分比、行号及总行数;
-N 在每行前输出行号;
-p pattern 搜索pattern;比如在/etc/profile搜索单词MAIL,就用 less -p MAIL /etc/profile
-s 把连续多个空白行作为一个空白行显示;
-Q 在终端下不响铃;man less     #查看less 使用head -n 5  /var/log/msg  #显示msg文件的前5行tail -n 5  /var/log/msg  #显示msg文件的最后5行
tail -f    /var/log/msg  #实时显示msg文件

二、shell运算符

在shell中,常见的有算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符等

2.1算术运算符

# bash不支持简单的数学运算,但是可以通过其他命令来实现,利用awk 、expr(常用)完成表达式的计算

条件表达式:

= |赋值| a=$b 将把变量 b 的值赋给 a。
==| 相等。用于比较两个数字,相同则返回 true(真)。| [ $a == $b ] 返回 false(假)。
!= |不相等。用于比较两个数字,不相同则返回 true。 |[ $a != $b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,如: [ $a == $b ]、[ $a != $b ]

a=30
b=10
echo "$a"
echo "$b"
echo "a + b = " `expr $a + $b`  #输出40
echo "a - b = " `expr $a - $b`  #输出20
echo "a * b = " `expr $a \* $b` #输出300
echo "a / b = " `expr $a / $b`  #输出3
echo "a % b = " `expr $a % b`   #输出
--------------------------------------------
if [$a == $b]
thenech和b相等"
elseecho "a和b不等"     #输出a和b不等
fi

2.2关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

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

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

相关文章

B-splines曲线的绘制(Matlab)

虽然在这个链接三次 Bspline(B样条曲线) NURBS曲线的绘制 matlab_三次b样条曲线的绘制-CSDN博客中我们介绍了NURBS曲线&#xff0c;然而有时候我们通过B-spline曲线也能够解决问题。B-spline曲线作为NURBS曲线的一种特例&#xff0c;这里给出均匀B-spline曲线的表达式&#xff…

基于IDEA的Maven简单工程创建及结构分析

目录 一、用 mvn 命令创建项目 二、用 IDEA 的方式来创建 Maven 项目。 &#xff08;1&#xff09;首先在 IDEA 下的 Maven 配置要已经确保完成。 &#xff08;2&#xff09;第二步去 new 一个 project &#xff08;创建一个新工程&#xff09; &#xff08;3&#xff09;…

论文精读——KAN

目录 1.研究背景 2.关键技术 2.1 原始公式 2.2 KAN结构 2.3 缩放定律 3.技术扩展 4.模型效果 5.相关讨论 6.总结 文章标题&#xff1a;《KAN: Kolmogorov–Arnold Networks》 文章地址&#xff1a; KAN: Kolmogorov-Arnold Networks (arxiv.org)https://arxiv.org/a…

再次递表港交所,慧算账能否把握AI+财税SaaS机遇?

5月以来&#xff0c;港股IPO市场日渐兴旺&#xff0c;多家公司实现上市首日“零破发”&#xff0c;平均收涨约30%&#xff0c;6月更是出现了超2500倍超购新股。市场赚钱效应显现&#xff0c;投资者打新随之热情高涨&#xff0c;越来越多国内企业也开始抓紧赴港上市。 近日&…

Android-app自动更新总结(已适配9-0)(1)

} //检查版本号&#xff0c;第一次请求(post)&#xff0c;&#xff0c;&#xff0c;UpdateAppBean根据服务器返回生成 private void requestAppUpdate(int version, final DataRequestListener listener) { OkGo.post(Const.HOST_URL Const.UPDATEAPP).params(“version”, v…

vue element-ui 下拉框 以及 input 限制输入,小数点后保留两位 界面设计案例 和 例子:支持mp4和m3u8视频播放

vue input 限制输入&#xff0c;小数点后保留两位 以及 图片垂直居中显示 和 分享 git 小技巧-CSDN博客文章浏览阅读430次&#xff0c;点赞5次&#xff0c;收藏4次。error:Your local changes to the following files would be overwritten by merge:_error: your local change…

2024.6.18 作业 xyt

今日作业&#xff1a; 1. 完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果…

C++ 64 之 函数模版和普通函数调用规则

#include <iostream> #include <string> using namespace std;template<typename T> void myPrint(T a, T b){cout << "函数模板的调用" << endl; }void myPrint(int a, int b){cout << "普通函数调用" << endl…

C#——只读属性readonly

只读属性readonly 类的字段可以通过一个readonly(只读)表示这个为只读字段&#xff0c;不能被构造函数之外地方进行修改&#xff0c;静态只读字段不能在非静态的构造函数中使用 定义 只读属性的特点&#xff1a; 字段是只读的非静态 只能在非静态方法中进行修改 字段是只读的…

NoSQL-Tidis支持分布式事务,兼容redis协议,使用tikv存储引擎,可水平扩展

项目repo地址 GitHub - yongman/tidis: Distributed transactional NoSQL database, Redis protocol compatible using tikv as backend Tidis是分布式数据库,支持redis协议,多种数据结构支持,编写语言为golang。 Tidis工作角色类似于TIDB,提供协议转换和数据结构计算,底…

RockChip Android12 System之Datetime

一:概述 本文将针对Android12 Settings二级菜单System中Date&time的UI修改进行说明。 二:Date&Time 1、Activity packages/apps/Settings/AndroidManifest.xml <activityandroid:name="Settings$DateTimeSettingsActivity"android:label="@stri…

Unity基础(三)3D场景搭建

目录 简介: 一.下载新手资源 二.创建基本地形 三.添加场景细节 四,添加水 五,其他 六. 总结 简介: 在 Unity 中进行 3D 场景搭建是创建富有立体感和真实感的虚拟环境的关键步骤。 首先&#xff0c;需要导入各种 3D 模型资源&#xff0c;如建筑物、角色、道具等。这些模…

springboot与flowable(9):候选人组

act_id_xxx相关表存储了所有用户和组的数据。 一、维护用户信息 Autowiredprivate IdentityService identityService;/*** 维护用户*/Testvoid createUser() {User user identityService.newUser("zhangsan");user.setEmail("zhangsanqq.com");user.setF…

CHATGPT说这个运算放大器是比较器,我说这是运放典型的同相比例放大器,一个光控电路分析

纠正 图1 光控电路 该电路来自一个问题&#xff0c;链接见文末。 因GPT的分析有误&#xff0c;特此纠正。 引用图片和答案用于分析&#xff0c;如侵权请联系本人。 电路分析&#xff1a; 该电路为光控灯电路&#xff0c;灯光为LED发光二极管 D。 光敏电阻RG的阻值和光线强度关…

6.18作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

翻转数位00

题目链接 翻转数位 题目描述 注意点 可以将一个数位从0变为1找出能够获得的最长的一串1的长度&#xff08;必须是连续的&#xff09; 解答思路 参照题解使用动态规划解决本题&#xff0c;对于任意一个位置i&#xff0c;dp[i][0]表示到达且包含第i位不翻转0最长1的长度&…

思科配置路由器,四台主机互相ping通

一、如图配置 PC4和PC5用来配置路由器&#xff0c;各ip、接口如图所示。 二、配置各主机ip、子网掩码SNM、默认网关DGW (一)、PC0 (二)、PC1 (三)、PC2 (四)、PC3 三、 配置路由器Router0 (期间报错是打错了字母) Router>en Router#configure terminal Enter configurat…

软考阅卷将完成?!软考成绩有望六月底公布!

2024上半年软考考试已于5月25日-28日举行&#xff0c;考完试后大家最关心的事情莫过于查分了。 一、最新消息 1、不同地区在报名时对成绩公布的时间有所预示&#xff0c;但并没有一个统一的日期举个例子&#xff0c;江苏考区预计在6月下旬公布成绩&#xff0c;而黑龙江考区则预…

【Altium】Sheet Symbol器件页面符和对应原理图端口同步

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标&#xff1a; 更给原理图端口后&#xff0c;如何同步到对应的sheet symbol 2、应用场景&#xff1a; 使用层次结构原理图设计的情况下&#xff0c;修改了某张原理图上的端口之后&#xff0c;其对应的sheet symbol上的…

Java网络爬虫入门

文章目录 1、导入依赖2、CrawlerFirst 1、导入依赖 <dependencies><!-- HttpClient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version></…