zoukankan      html  css  js  c++  java
  • 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 ewLine 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 '' ' '

    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

     

  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/wzx1blog/p/12941268.html
Copyright © 2011-2022 走看看