linux shell指令大全整理
linux shell指令
shell是一种脚本语言, 需要有编译器执行
- bash是linux下默认的shell
- sh是unix下默认的shell
在ubuntu中bash和sh都可用
执行
#!/bin/bash
#告诉系统用哪个解释器解释
- 通过bash执行, 不需要执行权限
bash test.sh
- 设置为可执行文件, 直接执行
chmod +x test.sh
./test.sh
变量类型
- 局部变量
在脚本中定义, 仅在当前shell中有效, 其他shell不能访问
- 环境变量
所有程序, 包括shell启动的程序, 都能访问环境变量, 在c中通过system()函数执行的结果可以通过环境变量传递回来
- shell变量
特殊变量, 比如传递给shell的参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YEeaQ6cj-1648294508220)(C:\Users\87698\Documents\myMarkdown\linux shell指令.assets\961754-20170330200924617-398300179.png)]
$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。
局部变量
# 定义变量, 不能有空格, 对于文本有没有双引号好像都可以
country=china
country="china"
# 数字没有双引号就是数字, 有就是文本
number=100# 使用变量,可以用{}限定界限
echo "i from ${country} i $number old"
命令替换
转义符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LawTagIw-1648294508223)(C:\Users\87698\Documents\myMarkdown\linux shell指令.assets\961754-20170330200926508-1068258772.png)]
命令替换
用反引号``可以将一个命令的输出给另一个变量
directory=`pwd`
echo $directory
shell运算符
原生bash不支持简单的算术运算, 但是可以通过其他命令来实现, 比如awk
和expr
,expr
是一款表达式计算工具
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NVnTDVFh-1648294508225)(C:\Users\87698\Documents\myMarkdown\linux shell指令.assets\961754-20170330200928242-1174589159-16482726592884.png)]
val=`expr 2 + 2`
通过命令替换将计算结果传给val
字符串
单引号的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
shell的文件包含
Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本
. filename
#或
source filename
字符串运算符
用来计算两个字符串是否相等, 假定变量a为"abc",变量b为"efg", 要用[]
括号
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否不相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否不为 0,不为 0 返回 true。 | [ -n “$a” ] 返回 true。 |
$ | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
if-else
注意[]要和里面内容用空格分开, 运算符=两边也要用空格分开
if和[]也要分开, then要另起一行
用fi结尾
a="abc"
b="efg"if [ $a = $b ]
thenecho "equal"
elseecho "no"
fi
if else-if else
用-gt
判断左边的数字是否大于右边的数字, 不是用>
-lt
判断左边是不是小于右边的
==
判断两数是否相等
echo要用"", 不然会把1的值写入到1的值写入到1的值写入到a名字的文件里
a=100
if [ $1 -gt $a ]
thenecho "$1 > $a"
elif [ $1 -lt $a ]
thenecho "$1 < $a"
elseecho "$1 = $a"
fi
for循环
穷举法, 或者用{x…y}表示从x到y, 或者用*表示所以可用的
#穷举法
for loop in 1 2 3 4
doecho "The value is: $loop"
done#从0开始的10个,没有10
for i in {0..10}
domkdir dir$i
done#通配符
for i in /etc/*.conf#用$()效果和``一样,执行脚本读取返回值
for i in $(cat /root/users.txt) --》从列表文件读取文件名
douseradd $iecho "123456" | passwd --stdin $i --》通过管道指定密码字串
done
while循环
这边用了两个括号后, 就可以<=号进行判断了, 不知道为什么, 而且还是连着的
而且用了let命令,let 命令是 BASH 中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
#!/bin/bashlet a=5+4
let b=9-3
echo $a $b
int=1
while(( $int<=5 ))
doecho $intlet "int++"
done
无限循环
用了read命令, 从输入得到一个值到input
变量中, 判断是不是y,是则用break
跳出循环
while :
doecho "input a key:"read inputif [ $input = 'y' ]thenecho "you input y break"breakelseecho "you input other"fi
done
函数
参数和调用脚本一样, 通过空格穿, 返回值只能返回int, 没什么用
funWithParm(){echo "第一个参数为 $1 !"echo "第二个参数为 $2 !"
}
funWithParm 1 2
重定向
命令 | 说明 |
---|---|
command > file | 将输出重定向到 file。 |
command < file | 将输入重定向到 file。 |
command >> file | 将输出以追加的方式重定向到 file。 |
输出重定向是将输出定向到文件里
输入重定向是从文件读书数据作为输入给程序
>右边不需要空格
深入理解
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
如果希望stderr重定向到file, 可以这样写, 在>前加2
command 2>file
标准错误文件 stdout 和 stderr 合并后重定向到 file
command > file 2>&1
command &> file
ping历程
找到局域网中的主机
- -c 1 —》只ping一次。
- -i 0.2–》第一个包和第二个包之间间隔0.2s
- -w 2 --》只等待2s
tr -s
替换重复的字符
cut
用来从标准输入或文本文件中剪切列或域
#!/bin/bash
for r in 192.168.1.{1..254}
doping -c1 -w2 "${ip}" &>/dev/null
done
arp -n|grep ether|tr -s ' '|cut -d' ' -f1
通配符
有点类似正则表达式
符号 | 作用 |
---|---|
* | 匹配任何字符串,包括空字符串,*代表0个或多个 |
? | 匹配任何一个字符,?代表一个字符 |
[abcd] | 匹配abcd中的任何一个字符 |
[a-z] | 表示范围a-z,中的任何一个字符 |
管道符
|:把前面命令的结果给后面的命令
arp -n|grep ether|tr -s ' '|cut -d' ' -f1
作业控制
命令 | 说明 |
---|---|
ctrl+c | 终止进程 |
ctrl+z | 挂起一个进程 |
jobs | 查看当前有多少在后台运行的命令 |
fg | 将后台中的命令调值前台继续运行 |
bg | 将一个在后台暂停的命令, 在后台中继续执行 |
命令+& | 将命令后台执行 |
linux shell指令大全整理相关推荐
- 手机linux系统指令大全,Linux系统指令大全
送给初学的穷人:Linux系统指令大全 cat 使用权限:所有使用者 使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName 说明:把档案串连接后传到 ...
- linux shell 指令 诸如-d, -f, -e之类的判断表达式(转)
linux shell 指令 诸如-d, -f, -e之类的判断表达式(转) 一.文件比较运算符 e filename 如果 filename存在,则为真 如: [ -e /var/log/syslo ...
- linux shell 基本命令大全,常用的Linux shell命令详解收集整理
1 文件与目录操作命令 1.1文件内容查询命令 grep.fgrep.egrep 语法:grep[选项][查找模式][文件名1,文件名2,--] 选项: -E 每个模式作为一个扩展的正则表达式对待 - ...
- linux shell指令 amp,shell入门基础amp;常见命令及用法
shell shell是一个命令解释器,实际是一个程序,/bin/bash,linux中所有的命令都由它来解释,有自己的语法 shell脚本 以.sh结尾 shell语法+linux命令 注释: 单行 ...
- linux test指令大全,linux test命令详解
test命令是linux下的一个命令,那么它的具体语法是怎样的呢?下面由学习啦小编为大家整理了linux test命令的相关知识,希望对大家有帮助! 1.linux test命令基本格式 test e ...
- linux基础指令大全软件测试必背
ip addr 查看ip地址 man ls 查看命令的帮助手册 pwd print work directory 打印当前工作目录 . 当前目录(文件夹) - 上一级目录 cd change dire ...
- shell 指令使用整理
1.getopts unix有一个优点就是标准UNIX命令在执行时都具有相同的命令行格式: command -options parameters 如果在执行Shell程序也采用上述格式,Bour ...
- linux python指令大全,Linux常用指令
解决pip安装进度很慢 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --default-timeout=100 sklearn 创建 ...
- linux shell 指令 awk 是什么意思
参考资料: linux awk命令详解 - ggjucheng - 博客园 这是一个强大的文本分析工具. 力扣
最新文章
- 死磕Java多线程(五)---理解CPU高速缓存的工作原理 《JAVA性能优化权威指南》 提到过CPU高速缓存未命中率影响线程切换频率
- java容易混淆的知识点
- 蓝桥杯_算法训练_关联矩阵
- ros_openvino_toolkit环境搭建纪实
- JAVA通信编程(一)——串口通讯
- 数据库中敏感字段的标记、标示
- 如何逼疯一名数学系学生?
- Java高并发编程详解系列-单线程执行设计模式
- 远看像乱序执行,近看是内存屏障的BUG是如何解决的?
- Hadoop巨头完成合并,成全球第二大开源软件公司!
- mysql系统属性,mysql
- log4j配置文件以及控制日志级别
- 继电保护原理5-变压器保护
- ps景观平面图转鸟瞰图_怎么用 PS 做景观平面图?
- 基于leaflet地图对行政区进行维诺图区域划分
- ARP协议和NDP协议分析
- 长篇连载,人生30年(六):大结局!
- python解压多层压缩包,兼容tar.gz .tgz .zip .7z .gz
- linux-磁盘分区
- 自助查询打印机应用瓶颈