shell 基本语法介绍

Posted 向溪行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 基本语法介绍相关的知识,希望对你有一定的参考价值。

一、介绍

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",为:1cpu8Intel(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:为64CentOS6.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 基本语法介绍的主要内容,如果未能解决你的问题,请参考以下文章

shell基础 -- 基本语法

Linux系统编程-Shell脚本基本使用(数组函数字符串处理)

Shell编程快速入门,这一篇就够了基本语法结合案例

Shell条件测试)

shell编程:基本语法

Shell脚本学习——基本语法阶段一