Linux shell命令行基础

news2024/11/26 16:27:06

shell简介

shell 与内核沟通的界面、应用程序等。用于将用户操作传递给内核执行。

shell是面向过程 的若类型的解释性语言,不需要编译即可直接执行,常用于作脚本

Linux中的shell

在/etc/shells文件中 存储Linux包含的shell。

最常用的是bash,tcsh,csh,sh,nologin等shell

bash                基于GNU框架下发展出的shell

csh                c语言语法的shell

tcsh                整合csh,有更多功能

sh                已被bash替代

nologin        可以让用户无法登录主机

 

/bin/bash是大多数Linux版本采用的默认shell

为什么系统上合法的shell要写入shells这个文件?

因为系统会检查那些用户能够使用shell,而这些shell的查询就是藉由/etc/shells文件

用户什么时候可以取得shell来工作?用户默认获得哪一个shell?

用户登录时,系统就会给一个shell使用,给的哪个shell根据/etc/passwd文件的设置。


编写shell脚本的规范

1)脚本声明       #!/bin/bash
2)注释信息       行首以#号开头定义注释信息,被注释的行内容将不会被执行
3)可执行语句     编写要执行的脚本代码,如echo命令,输出“  ”之间的字符串

vim /root/firsh.sh
    #!/bin/bash
    cd /boot
    echo "当前目录位于"
    pwd
    echo "vml开头文件包括"
    ls -lh vml*

运行shell脚本 

1)用绝对/相对路径指定脚本文件运行,需要执行用户拥有执行权限x

        脚本会在子shell环境中运行

chmod +x /root/first.sh

#指定绝对路径
/root/first.sh
#指定相对路径
./first.sh

2)用 bash/sh 程序指定脚本文件运行,不需要执行权限

        脚本会在子shell环境中运行

#指定shell解释脚本
sh first.sh
bash first.sh


3)用 source/. 指定脚本文件运行

        脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)

#通过source运行
source first.sh
. first.sh

重定向与管道操作

 重定向 

标准输入/dev/stdin0默认设备为键盘
标准输出/dev/stdout1默认设备为屏幕
标准错误输出/dev/stderr2默认设备为屏幕
重定向输入<从文件读取数据,而不是键盘
重定向输出

>

>>

输出正常信息到文件中,并覆盖原内容

输出正常信息到文件中,从源文件内容追加内容

重定向错误输出

2>

2>>

输出错误信息到文件中,并覆盖原内容

输出错误信息到文件中,从源文件内容追加内容

混合输出

&>

&>>

2>&1

输出正常和错误信息到文件中,并覆盖原内容

输出正常和错误信息到文件中,从源文件内容追加内容

输出正常和错误信息到文件中,并覆盖原内容

输出正常信息到文件中
echo 'abc' > 1.txt  #覆盖内容
echo 'abc' >> 1.txt #追加内容
    [root@xue xue]# cat 1.txt
    abc

输出错误信息到文件中
qwerfdaszecho 'abc' 2> 1.txt  #覆盖错误内容
qweasdzccecho 'abc' 2>> 1.txt #追加错误内容
    [root@xue xue] cat 1.txt
    bash: qwerfdaszecho: 未找到命令...

混合输出 正确和错误都会输出
echo 'abc' &> 1.txt        #覆盖内容
echo 'abc' &>> 1.txt       #追加内容
echo 'abc' > 1.txt 2>&1    #覆盖内容
echo 'abc' >> 1.txt 2>&1   #追加内容

ls -lh > log.txt 2>&1   等于   ls -lh &> log.txt

本来1--->屏幕,执行>log后,输出到屏幕的数据重定向到log.txt。随后又执行了2>&1,2的错误数据重定向到1,而1指向log.txt,于是正确与错误一同混合输入log.txt

             


管道符号     | 

将左侧命令结果作为右侧命令的输入

ps aux | wc -l #统计进程
echo 'abc123' | passwd --stdin zhangsan 
#管道符号输入的字符通过标准输入转换免交互设置密码

find -name 123 type -f | xargs rm -r   
#若右边命令需要参数运行,需要加上xargs
#找名称带有123的文件删除

变量

定义变量

  • 变量名=变量的值
  • read [-p "提示信息"]  变量名        (从键盘输入获取值赋给变量)
NAME=xue

read -p "输入年龄"  AGE

输出变量值

echo $NAME $AGE
echo $NAME$AGE
#echo $NAMEAGE 错误写法,会认为变量为NAMEAGE 
echo ${NAME}${AGE}

引号的使用

双引号: 会把 $ 当作特殊符号去引用变量的值
单引号: 会把 $ 等特殊符号是为普通字符去使用
反撇号: 获取里面的命令执行后的输出结果,`...` 等同于 $(...)

echo "$NAME"
echo '$NAME'
echo `which mkdir`
echo $(which mkdir)
ldd `which sshd`

 

 局部变量 全局变量

普通的变量赋值都为局部变量 如果需要设置全局变量,使用export

export abc
export abc=123

 注意 重启后全局变量会失效。若是设置永久全局变量,设置/etc/profile

vim /etc/profile
    export abc=123

shell整数运算

加法         +

减法         -

乘法         \*

除法         /

求余         %

expr 

expr 变量1 运算符 变量2

expr 10 - 5

a=10
b=5     
expr $a - $b
#变量运算

echo输出结果的三种写法

echo $(expr 10 + 20)
echo $((10 + 20))   
echo $[10 + 20]

let

let i=10+20
echo $i 

let i++   i--    相当于 i=$[i + 1] 或 $[i - 1]
    i+=2  i-=2   相当于 i=$[i + 2] 或 $[i - 2]

特殊的变量

PATH   系统命令搜索路径

echo $PATH

若需要添加自定义的脚本,在bash中可以直接调用

        方法1 创建软链接/user/local/bin/

ln -s /opt/* /user/local/bin/ #创建软链接
#将opt文件夹的所有文件在bin中创建软链接

        方法2  将环境变量写入/etc/profile

vim /etc/profile
    export PATH=$PATH:/opt 
#$PATH:/opt 前面的path表示路径中的其他文件,再冒号分隔加上opt中的文件

若没有加前面的path导致全部指令都不能使用,可以指定绝对路径访问命令再修改回来
 

PWD    当前所在目录

pwd
echo $PWD

USER   当前登录用户

echo $USER

HOME   当前登录用户的家目录

echo $HOME

SHELL  当前登录用户的shell环境

echo $SHELL

LANG   当前系统的语言和字符集编码

echo $LANG

HISTSIZE  历史命令条数

echo $HISTSIZE

env  查看当前系统环境变量

env

只读变量

变量不允许被修改,只有关机才能清除变量。

name=xue
readonly name

name=xuexue #不能重新赋值
unset name #不能被删除

 

位置变量

vim 1.sh
echo $0    
echo $1    #显示命令中第一个变量
echo $2    #显示命令中第二个变量
echo $3    #显示命令中第三个变量
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo $10    #显示命令中第1个变量,后面加上0。不是个位数都需要按下面加上大括号
echo ${10}  #显示命令中第10个变量
chmod +x ./1.sh
#脚本添加权限
./1.sh 1 2 3 4 5 6 7 8 9 10
#调用观察结果

$1 ~ $9  第一个到第九个位置变量,代表脚本后面跟的以空格相间隔的参数
${10}    第十个位置变量

$0    代表脚本本身
$#    代表脚本后面跟的以空格相间隔的参数的数量
$?    代表上一条命令执行是否正常/成功,命令执行正常返回0,非0值均代表命令执行异常

$*    不加双引号时,代表脚本后面跟的以空格相间隔的所有参数;加上双引号后,会把脚本后面跟的以空格相间隔的所有参数当作一个整体
$@    不加双引号时,代表脚本后面跟的以空格相间隔的所有参数;加上双引号后,效果不变,仍然会把每个参数当作一个个体

vim addnum.sh
            #通过位置变量完成数字相加
num1=$1
num2=$2
sum=$(($num1+$num2))
echo $num

./addnum.sh 12 34
    $0      $1 $2 

  

 

预定义变量

$*        $@ 

无" "

        $*        $@       都表示命令与脚本要处理的参数

有" "

        ''$*''         把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4”

        ''$@''        把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表"$1" "$2" "$3" "$4"

 

$0: 表示当前执行的脚本或命令的名称。

$#: 表示命令或脚本要处理的参数的个数。(当前脚本有x个参数)

$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于shell脚本中return退出函数并返回的退出值。
 

vim mybak.sh
#!/bin/bash
time=backup-`date +%F`.tgz

tar zcf $time $* & > /dev/nul 
#/dev/null表示的是一个黑洞文件,通常用于丢弃不需要的数据输出

echo"已执行 $0 脚本,"
echo"共完成 $# 个对象的备份"
echo"具体内容包括: $*"


chmod +x mybak.sh
./mybak.sh /etc/passwd /etc/shadow

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

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

相关文章

Docker虚拟化技术

1.3 Docker虚拟化技术概念 Docker是一款轻量级、高性能的虚拟化技术&#xff0c;是目前互联网使用最多的虚拟化技术&#xff0c;Docker虚拟化技术的本质类似集装箱机制&#xff0c;最早集装箱没有出现的时候&#xff0c;码头上有许多搬运的工人在搬运货物&#xff0c;集装箱出…

Karl Guttag:现有Micro LED/LCoS+光波导AR眼镜对比解析

轻量化是未来AR眼镜的发展趋势&#xff0c;为了缩减尺寸&#xff0c;AR眼镜厂商尝试了多种方案&#xff0c;长期来看Micro LED光机在小型化上更有优势&#xff0c;但现阶段LCoS光机的图像表现更好。在CES 2023期间&#xff0c;DigiLens、Lumus、Vuzix、OPPO、Avegant也展出了不…

进程通信(同一主机)

1.概述 进程通信机制包括&#xff1a; 传统的UNIX进程间通信&#xff1a;无名管道、有名管道、信号 System V 进程间通信&#xff1a;消息队列、信号量、共享内存 2.管道通信 2.1无名管道 1.特点 &#xff08;1&#xff09;适用具有亲缘关系的进程 &#xff08;2&#x…

C++高精度减法

高精度减法指的是大整数的相减&#xff0c;大整数是用基本数据类型无法存储其精度的整数&#xff0c;位数不超过10^6&#xff0c;注意是位数&#xff0c;不是数值的大小。 因为其精度超过基本的数据类型规定的大小&#xff0c;所以常规的计算方法是不可以实现的&#xff0c;这…

UE4 架构初识(二)

目录 UE4 引擎学习 一、架构基础 1. Pawn &#xff08;1&#xff09;DefaultPawn &#xff08;2&#xff09;SpectatorPawn &#xff08;3&#xff09;Character 2. AController 3. APlayerState 4. 总结 UE4 引擎学习 一、架构基础 1. Pawn UE也是从Actor中再派生…

Zynq-7000、国产zynq-7000的GPIO控制(二)

本文详细说明一下使用SDK中使用MIO/EMIO作为输入中断 SDK中使用MIO/EMIO作为输入中断 这个使用场景可以扩展到PL的可以通过EMIO或者MIO&#xff0c;告知PS中断来了&#xff0c;需要PS处理一些特定事物&#xff0c;当然也可以连接最简单的按键。 这个可以参考SDK自带例程来实…

Python入门教程+项目实战-11.2节: 元组的操作符

目录 11.2.1 元组的常用操作符 11.2.2 []操作符: 索引访问元组 11.2.3 [:]操作符&#xff1a;元组的切片 11.2.4 操作符&#xff1a;元组的加法 11.2.5 *操作符&#xff1a;元组的乘法 11.2.6 元组的关系运算 11.2.7 in操作符&#xff1a;查找元素 11.2.8 知识要点 11…

企业的信息化和数字化有什么区别

数字化是业务新的存在形式&#xff0c;如果说信息化是对业务的局部支撑&#xff0c;那么数字化就是对业务的整体重塑&#xff0c;这是数字化和信息化之间最大的区别&#xff0c;也决定了数字化转型在实施时有着与信息化建设完全不同的底层逻辑。信息化建设和数字化转型有着相同…

手把手教你编写SQLMap的Tamper脚本过狗

本文仅用于技术讨论与学习 测试环境 最新版某狗 测试方法 安全狗其实是比较好绕的WAF&#xff0c;绕过方法很多&#xff0c;但这里我们就用一种&#xff1a;注释混淆 一招鲜吃遍天 注释混淆&#xff0c;其实就是在敏感位置添加垃圾字符注释&#xff0c;常用的垃圾字符有/、…

关于Vue中使用全屏容器无法占满屏幕以及样式不生效问题解决方案

先来看示例问题 App.vue文件 global.css文件 网页效果 可以看到即使设置了宽度和高度为100%都无法占满屏幕&#xff0c;而且容器还超出了屏幕&#xff0c;上拉才可以看到下边框。查看网上解决方法&#xff1a; 1.height设置为100vh&#xff0c; 或者设置为calc&#xff08;10…

订单交期迟滞,销售回应慢,怎么解决客户问题?

按客户定制产品订单&#xff0c;进行报价和生产的制造企业&#xff0c;有拆解图纸生成物料BOM的工序&#xff0c;通常由企业产品设计部门的拆图员岗位专门负责。 手工制作BOM数据&#xff0c;准确性低 拆图员肉眼查看每页图纸中的表格数据&#xff0c;手动敲键盘填入到企业要…

判空、基本数据类型、stream的groupby、空指针异常

0什么是序列化 1 第一行、第二行就是一个空对象【一个对象的所有元素的值都为null–空对象】 第三行不是空对象&#xff0c;是元素为的对象 那么如何过滤第一行与第二行呢 方式一&#xff1a;在mysql里面 where ISNULL(t.relevance_id)0 and LENGTH(trim(t.relevance_id))&…

Docker Harbor | 私有仓库 | 用户登录 |用户创建

Docker Harbor | 私有仓库 |用户登录 |用户创建 一、Docker Harbor 概述二、Harbor 的核心组件四、Harbor 构建 Docker 私有仓库实战4.1 搭建本地私有仓库4.2 部署 Docker-Compose 服务4.3 启动harbor验证4.4 在其他客户端上传镜像4.5 维护管理Harbor 一、Docker Harbor 概述 …

【校招VIP】面试了一个抽奖的项目,我终于搞明白了,是8股文终于开始作恶了

最近因为招实习生&#xff0c;进行了很多次面试。 但面试的结果不尽人意。 就感觉今年的面试跟以前差距太大了。 直到经过这个同学的面试&#xff0c;我终于明白了是什么原因。 这个同学是南京一所211的研究生&#xff0c;他的项目经历是做了一个抽奖的微服务管理平台。 也…

JAVA 类型的类型转换

JAVA 类型的类型转换 一、基本类型的类型转换 箭头开始的地方是小类型,箭头指向的地方是大类型 我们此处所指的"大"和"小",指的是对应类型的取值范围,不是字节数哦 1.1 小到大(隐式转换) byte m 120; int n m;//小转大,右面的m是小类型,给左面的n大…

【微服务笔记21】微服务组件之Sentinel服务熔断、服务降级、流量控制介绍

这篇文章&#xff0c;主要介绍微服务组件之Sentinel服务熔断、服务降级、流量控制。 目录 一、Sentinel组件 1.1、Sentinel介绍 1.2、Sentinel环境搭建 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;资源和规则 1.3、使用SphU定义资源 &#xff08;1&am…

LNMP网站框架搭建

1. Nginx的工作原理 php-fpm.conf 是控制php-fpm守护进程的 php.ini是php解析器 工作进程&#xff1a; 1.客户端通过域名进行请求访问时&#xff0c;会找Nginx对应的虚拟主机 2. Nginx对该请求进行判断&#xff0c;如果是静态请求,Nginx会自行处理&#xff0c;并将处理结果返…

微信小程序原生开发功能合集十三:列表界面的实现

本章实现列表展示组件,包括列表数据加载、筛选、分页加载、快速搜索等功能。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: https://edu.csdn.net/course/detail/379…

提交代码「前置处理」,向前一小步,效率提升「亿点点」

&#x1f4a1; 如何巧用 Git Hook&#xff0c;解决代码提交中的代码规范性、冲突和错误以及工作流程问题&#xff1f; 近日&#xff0c;在极狐Tech Talk 直播上&#xff0c;极狐(GitLab) 后端工程师田鲁分享了自己的实践经验。以下内容整理自本次直播&#xff0c;你也可以点击文…

Linux第二章

文章目录 前言一、Linux系统的目录结构和路径表达形式二、Linux命令基础1.ls命令入门2.ls命令的参数和选项3.-cd-pwd命令4.相对路径绝对路径和特殊路径符5.-mkdir命令6.-touch-cat-more-命令7.-cp-mv-rm-命令8.-which-find命令9.-grep-wc-管道符10.-echo-tail-重定向符11.-vi编…