一、介绍

shell 是属于弱类型语言,指的是在定义变量时不需要指定变量的类型,就如python也是弱类型语言。一般以:

:.sh结尾的文件

:文件第一行固定为:#!/bin/bash,表示指定以shell进行编程。

:#表示注释

二、shell语法

1、定义变量:变量名=变量值

变量名组成规范:不能以数字,以字母、数字、下划线组成。

释放变量空间:unset 变量名,如unset name

如:name=wzx,输出:echo $name

如:name1="today is a good day",定义变量中带有空格的变量,双引号、单引号均可。

注:单引号、双引号、反单引号的区别:

m="zhangyuqi$name",此时使用的是变量中对应的值

m=’zhangyuqi $name‘,此时输出只是原样输出字符串

m="zhangyuqi \$name",此时输出只是原样输出字符串,与单引号的效果相同。

h=·pwd·,echon h将会输出h对应的shell命令输出当前目录情况。

2、执行shell文件

:当没有执行权限时:sh  shell脚本名

:加入执行权限:chmod +x shell脚本名,再执行./shell脚本名

:可以统计有多少个文件:ls -l |wc -l

3、read

read  a  b:利用键盘输入多个变量,多余的变量将会都给最后一个变量,变量之间用空格隔开

read -p "提示信息"   变量名

4、参数传递:$1,表示接受的第一个参数,$0表示接受执行的文件名,$@,显示全部的参数,  $#,统计参数个数

:sh wzx.sh /root

5、重定向:把执行命令的内容输入到文件当中

正确的命令:ls 1>a.txt,将会把正确的命令内容输入文件中这时候时覆盖之前的内容,ls 1>>a.txt,追加到已有的文件中

错误的命令:ls 2>a.txt,将会把错误的命令内容输入文件中这时候时覆盖之前的内容,ls 2>>a.txt,追加到已有的文件中

6、分支结构if  else:判断任意目录是否为空

7、逻辑运算符:且:-a      或:-o      非:!

8、比较运算符:相等:-eq         不等:-ne         大于:-gt         小于:-lt          大于等于:-ge        小于等于:-le

9、测试文件的状态:test  参数  变量名

test  -e:表示文件存在

test  -f:表示文件存在且为文件类型

test  -r:表示文件可读

test  -w:表示文件可写

test  -x:表示文件可执行

10、case分支:

11、for循环:seq start  size  max表示生成一个序列开始值,步长,最大值

12、while循环:

13、函数:

14、函数返回值的调用:$?

默认正确的返回值为0,错误的返回值为1

15、

获取文件的前5行:head -5 aa.conf

获取文件的前5行后剪取文件的前5个字节:head -5 aa.conf |cut -b 1-4

注意:1个空格是1个字节,1个字母也是1个字节,1个汉字是3个字节。1个空格是1个字符,1个字母也是1个字符,1个汉字是3个字符

获取文件的前5行后剪取文件的前5个字符:head -5 aa.conf |cut -c 1-4

获取文件的前5行后剪取文件的第一个域,-d按域剪取,-f取第几个域:head -5 aa.conf |cut -d ":" -f 1

16、

shell查找某个文件是否包含关键字:grep "root" /etc/group

剪取第一个域:grep "root" /etc/group|cut -d ":" -f 1

17、sed向文件中插入内容

插入文件:sed -i 4a\newLine wzx.txt

三、shell常用命令

1、查看当前文件内容:ll显示文件的详细信息,ls只显示相关的文件名

参数 -a:ll -a显示包括隐藏文件在内的所有文件

2、进入指定文件夹:cd

3、显示当前工作目录:pwd

4、创建目录:mkdir

参数 -p:递归创建文件夹 :mkdir -p 1/2/3

5、删除目录:rmkdir

参数 -p:递归删除文件夹,如果某个文件夹下有内容则不能使用此命令 :rmkdir -p 1/2/3r

6、复制文件:cp

复制一个文件到另一目录:cp 1.txt ../test2

复制一个文件到本目录并改名:cp 1.txt 2.txt

复制一个文件夹a并改名为b:cp -r a b

7、移动:mv

将一个文件移动到另一个目录:mv 1.txt ../test1

将一个文件在本目录改名:mv 1.txt 2.txt

将一个文件一定到另一个目录并改名:mv 1.txt ../test1/2.txt

8、删除文件:rm

参数 -r 可删除目录,-f表示强制删除:rm -rf aa.txt

9、du、df

du命令可以显示目前的目录所占用的磁盘空间,df命令可以显示目前磁盘剩余空间。

du -hs 指定目录 查看指定目录的总大小

10、查看文件内容:cat

查看操作系统版本:cat /etc/issue

查看操作系统内核:cat /proc/version或者uname -a

以压缩空行的方式显示文件:cat -s  aa.txt

以显示行号:cat -n  aa.txt

11、head、tail

head显示文件的头n行,tail显示文件的尾n行,缺省情况n都为10行。可以通过-n方式指定行数

12、wc

该命令用于统计指定文件中的字节数、字数、行数。-l 统计行数,-w 统计字数,-c 统计字节数

13、grep

通过管道过滤ls -l输出的内容,只显示以a开头的行: ls -l | grep '^a'

显示所有以d开头的文件中包含test的行: grep 'test' d*

显示在aa,bb,cc文件中匹配test的行:grep 'test' aa bb cc

14、scp

将本服务文件拷贝到另一台服务器:scp -r -P 22 glibc-2.18.tar.gz root@192.168.128.171:/home/

15、tar

打包:tar -cvf /tmp/etc.tar /etc

打包并压缩:tar -zcvf /tmp/etc.tar.gz /etc

解压tar.xz文件:tar -xvJf aa.tar.xz

解压tar.gz文件:tar -zxvf vv1579169748.tar.gz

打包文件:tar -cvf python学习.tar 01.py 02.py 03.py(只负责打包不压缩文件)

解包文件:tar -xvf python学习.tar

压缩文件1:tar -zcvf python学习.tar.gz 01.py 02.py 03.py (*.py)

解压文件1:tar -zxvf python学习.tar.gz

解压文件1:tar -zxvf python学习.tar.gz -C demo(直接指定解压后文件路径)

压缩文件2:tar -jcvf python学习.tar.bz2 01.py 02.py 03.py (*.py)

解压文件2:tar -jxvf python学习.tar.bz2

解压文件2:tar -jxvf python学习.tar.bz2 -C demo(直接指定解压后文件路径)

16、find

从根目录下查找某个文件:find / -name aa.txt

17、netstat

查看网络状态:netstat -tnulp |grep nginx

查看端口号:netstat -anp |grep 9090

18、创建连接

创建软连接: mv 01.py demo/b/c ln -s /home/python/Desktop/demo/b/c 01_juedui(绝对路径文件移动后不影响)

创建硬连接: ln /home/python/Desktop/demo/b/c 01_hard(源文件删除不影响)

四、

1、top:监控每个进程的资源占用情况

说明:

09:52:11 — 当前系统时间

790 days, 12:02 — 系统已经运行了790天12小时02分钟(在这期间没有重启过)

3 users — 当前有3个用户登录系统

load average:0.00, 0.01, 0.05 — load average后面的三个数分别是5分钟、10分钟、15分钟的负载情况。 load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

Tasks — 任务(进程),系统现在共有210个进程,其中处于运行中的有2个,208个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

1.0% us — 用户空间占用CPU的百分比。
0.7% sy — 内核空间占用CPU的百分比。
0.0% ni — 改变过优先级的进程占用CPU的百分比
98.3% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si — 软中断(Software Interrupts)占用CPU的百分比

st:这个虚拟机被hypervisor偷去的CPU时间

第一行时物理内存,第二行是虚拟内存。

509248k total — 物理内存总量(509M)
495964k used — 使用中的内存总量(495M)
13284k free — 空闲内存总量(13M)
25364k buffers — 缓存的内存量 (25M)

swap交换分区
492536k total — 交换区总量(492M)
11856k used — 使用的交换区总量(11M)
480680k free — 空闲交换区总量(480M)
202224k cached — 缓冲的交换区总量(202M)

PID:进程ID,进程的唯一标识符

USER:进程所有者的实际用户名。

PR:进程的调度优先级。这个字段的一些值是'rt'。这意味这这些进程运行在实时态。

NI:进程的nice值(优先级)。越小的值意味着越高的优先级。负值表示高优先级,正值表示低优先级

VIRT:进程使用的虚拟内存。进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小。进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR:SHR是进程使用的共享内存。共享内存大小,单位kb

S:这个是进程的状态。它有以下不同的值:

  • D - 不可中断的睡眠态。
  • R – 运行态
  • S – 睡眠态
  • T – 被跟踪或已停止
  • Z – 僵尸态

%CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。

%MEM:进程使用的可用物理内存百分比。

TIME+:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。

COMMAND:运行进程所使用的命令。进程名称(命令名/命令行)

2、sysstat:性能系统各种资源占用情况工具

下载:yun list sysstat

安装:yun install sysstat(配置文件目录:etc/cron.d/sysstat,数据存放目录:/var/log/sa/)

四、shell

1、获取指定应用的进程号:pgrep  java

2、获取指定进程号相关的环境变量,以格式化方式输出:cat /proc/32144/environ | tr '\0' '\n'

3、设置环境变量:export 变量名

例如:HTTP_PROXY=129.12.13.4:213

export HTTP_PROXY

export PATH="$PATH:/home/user/bin"

4、查看服务器内存总量:grep MemTotal /proc/meminfo,=132097828/1024/1024=126G

free  同样提供给我们 b (B), -k (KB), -m (MB), -g (GB) and –tera (TB)这些单位。要显示我们想要的单位,只要选择一个并在 free 后面跟上。下面一个是以GB 为单位的输出样例。:free -g

5、显示系统硬盘大小:fdisk -l |grep Disk,为4600G

6、linux服务器的CPU信息:cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep "physical id",为:1cpu8核 Intel(R) Xeon(R) E5-2640 v2 @ 2.00GHz

其实应该通过Physical Processor ID来区分单核和双核。而Physical Processor ID可以从cpuinfo或者dmesg中找到. flags 如果有 ht 说明支持超线程技术 判断物理CPU的个数可以查看physical id 的值,相同则为同一个物理CPU

可以看到上面,这台机器有1核的CPU,ID是0.

7、 查看CPU是核数:cat /proc/cpuinfo |grep "cores"|uniq:为8核

查看CPU个数:cat /proc/cpuinfo |grep "physical id" | uniq |wc -l

查看CPU型号:cat /proc/cpuinfo |grep "model name" | uniq

8、查看逻辑CPU与CPU核数信息:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c,看到有16个逻辑CPU, 也知道了CPU型号

9、查看物理CPU的个数:cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc:1个物理CPU(常用物理CPU情况)

10、查看逻辑CPU的个数:cat /proc/cpuinfo |grep "processor"|wc :看到有16个逻辑CPU

11、查看操作系统版本:head -n 1 /etc/issue:为64位CentOS6.5

uname -a               # 查看内核/操作系统/CPU信息的linux系统信息命令

12、查看操作系统版本:cat /etc/redhat-release

13、CPU情况:1CPU 8核 Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz

CPU个数:cat /proc/cpuinfo |grep "physical id" | uniq |wc -l

CPU核数:cat /proc/cpuinfo |grep "cores"|uniq

型号:Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz

14、硬盘大小:df -hl:

15、内存大小:grep MemTotal /proc/meminfo

16、位数:uname -a

shell 基本语法介绍的更多相关文章

  1. shell脚本语法基础汇总

    shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...

  2. Swift翻译之-Swift语法入门 Swift语法介绍

    目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...

  3. Shell函数语法

    Shell函数语法 定义函数: function   函数名(){ 指令... } 调用函数,方法1: 函数名 调用函数,方法2: 函数名  参数一   参数二 return在函数里面使用会跳出函数并 ...

  4. shell 的语法

    SHELL 的语法 n  变量:字符串,数字,环境和参数 n  条件:shell中的布尔值 n  程序控制:if, elif, for, while until, case n  命令列表 n  函数 ...

  5. flex弹性布局语法介绍及使用

    一.语法介绍 Flex布局(弹性布局) ,一种新的布局解决方案 可简单.快速的实现网页布局 目前市面浏览器已全部支持1.指定容器为flex布局 display: flex; Webkit内核的浏览器, ...

  6. 运维shell全部语法进阶

    Linux运维之shell脚本进阶篇 一.if语句的使用 1)语法规则 1 2 3 4 5 6 7 8 9 if [条件]     then         指令 fi 或 if [条件];then ...

  7. U-Boot shell脚本语法

    /********************************************************************** * U-Boot shell脚本语法 * 说明: * 之 ...

  8. freemarker语法介绍及其入门教程实例

    # freemarker语法介绍及其入门教程实例 # ## FreeMarker标签使用 #####一.FreeMarker模板文件主要有4个部分组成</br>####  1.文本,直接输 ...

  9. (转)shlex — 解析 Shell 风格语法

    原文:https://pythoncaff.com/docs/pymotw/shlex-parse-shell-style-syntaxes/171 这是一篇协同翻译的文章,你可以点击『我来翻译』按钮 ...

随机推荐

  1. PHP下对Mysql数据库的操作

    PHP连接数据库: 使用 mysqli-connect()函数,函数里面至少填三个变量:host,用户名,密码. $dbHost="localhost"; $dbUser=&quo ...

  2. 一次关于shiro反序列化漏洞的思考

    0x01前言 之前在我反序列化的那篇文章中(https://www.cnblogs.com/lcxblogs/p/13539535.html),简单说了一下反序列化漏洞,也提了一嘴常见的几种Java框 ...

  3. Spring全家桶--单数据源的配置

    前言 spring数据源的配置网络上有很多例子,这里我也来介绍一下单数据源配置的例子,基于SpringBoot的方式和原生的Spring的方式. 一.生成项目骨架(SpringBoot),运行一个简单 ...

  4. Java中使用split方法根据英文问号?切割字符串时报错

    因为正则表达式的原因,我们无法在java中直接使用String.split("?"),需要先转义其正确写法为: public static void splitStr() { St ...

  5. redis和memecache有什么区别?

    1.memcache所有值均是简单地字符串,redis有复杂的数据类型. 2.memcache不支持数据持久化,redis支持数据持久化. 3.redis速度比memcache快,redis构建了自己 ...

  6. PS与CSS字间距转换

    字间距: 实际像素大小 real_letter_spacing,(单位为px) 文字字号 font,(单位为px) 文字间距 spacing, 它们的换算关系为: real_letter_spacin ...

  7. 关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析

    大家可以自行网上找资源(网上资源比较多,不建议下载我的),也可以在我这里下载: 1.取得每个部门最高薪水的人员名称:正确   一共有4个单位,要进行左外连接 其中一个单位没得员工 SELECT dep ...

  8. unitest单元测试TestCase 执行测试用例(一)

    前言 unittest单元测试框架不仅可以适用于单元测试,还可以适用自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果. uni ...

  9. mybaits源码分析(一)

    一.源码下载 1.手动编译源码 为了方便在看源码的过程中能够方便的添加注释,可以从官网下载源码编译生成对应的Jar包,然后上传到本地maven仓库,再引用这个Jar. 首先需要编译打包parent项目 ...

  10. 深入研究webpack之Tree Shaking相关属性sideEffects用处

    Tree Shaking我原来也只是了解,这次碰巧深入研究了下,就写个博客记录一下,网上有很多讲Tree Shaking的,我写的这篇跟他们侧重点不一样 Tree Shaking相关的基础知识 1 w ...