zoukankan      html  css  js  c++  java
  • shell脚本概述

    1.1 shell概述

    shell是一个用C语言编写的程序,它是用户使用linux的桥梁。shell既是一种命令语言,又是一种程序设计语言。

    1.2 shell脚本结构

       1、开头:#!/bin/sh或#!/bin/bash  符号#!用来告诉系统,这个脚本需要什么解释器来执行。

       2、注释:以#开头的行表示注释。

       3、命令行的书写规则:一行一条命令 若一行多个命令,用(;)来分割,长命令可以使用反斜线字符()分割。

    1.2.1shell脚本的创建

    打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,如果用php写shell脚本,扩展就用php就可以。

    最简单的输出:

    #!/bin/bash
    echo "Hello World !"

     

     上面这是执行脚本的一种方式

    第二种方式:

     1.3 变量

    1.3.1 系统变量

    系统定义的变量 意义
    BASH=/bin/bash Bash Shell 名称
    BASH_VERSION=4.1.2(1) Bash版本
    HOME=/home/linuxtechi 用户家目录
    LOGNAME=Linuxtechi 当前登录用户的名字
    OSTYPE=Linux 操作系统的类型
    PATH=/usr/bin:/sbin/:/bin:/usr/sbin 可执行文件搜索路径
    PWD=/home/linuxtechi 当前工作目录
    SHELL=/bin/bash Shell名称
    USERNAME=linuxtechi 当前登录的用户名

    1.3.2 自定义变量

    命名变量:

    变量名=变量值

    name=lny
    echo $name
    lny

     1.3.3 特殊变量

    特殊变量 含义
    $$ Shell本身的PID
    $! Shell最后的运行后台process的PID
    $? 最后运行的命令结束代码(返回值)
    $- 使用set命令设定的flag一览
    $* 所有参数列表。如"$*"用["]括起来的情况、以"$1 $2...$n"的形式输出参数
    $@ 所有参数列表。如"$@"用["]括起来的情况、以"$1""$2"..."$n"的形式输出所有参数。
    $# 添加到shell的参数个数
    $0 shell本身的文件名
    $1~$n 添加到shell的各参数值。$1是第1参数、$2是第2参数..。

    PID是进程控制符,是属于各进程的身份标识,程序一运行系统就会自动分配给进程独一无二的PID,进程中止PID会被系统自动回收,可能会被继续分配给新运行的程序。

    #!/bin/bash
    
    echo "Shell 传递参数实例!"
    echo "执行的文件名:$0"
    echo "第一个参数为:$1"
    echo "第二个参数为:$2"
    echo "第三个参数为:$3"
    为脚本设置可执行权限,并执行脚本,输出结果如下所示:
    
    chmod +x test.sh 
    ./test.sh 1 2 3
    
    Shell 传递参数实例!
    执行的文件名:./test.sh 1 2 3
    第一个参数为:1
    第二个参数为:2
    第三个参数为:3

    1.3.4 变量赋值

    变量的赋值使用 "="

    例子:

    x=6
    a="welcome to beijing"

    引号的区别

    单引号('  '):所有转义符全部关闭,完整的展现出引号中的原始内容。

    双引号("  "):部分转义符关闭,但某些则保留(如:$)

    反引号(`  `): 反引号中内容作为一个系统命令并执行(结合了传参的方式)

     

    1.3.5 变量的调用

    在变量名面前加一个$符号

    name=linux
    echo $name
    linux

    1.3.6 read从键盘读入内容

    用法:

    read -p "提示信息" username

    read -p "请输入用户名:" username
    read -p "请输入密码:"  password
    echo -e "Login success,Welocome,$username"

    1.4 cut、sort、uniq、wc命令详解

    1.4.1cut

    linux cut命令用于显示每行开头算起num1到num2的文字

    参数:

    -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
    -c :以字符为单位进行分割。
    -d :自定义分隔符,默认为制表符。
    -f :与-d一起使用,指定显示哪个区域。
    -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
    范围之内,该字符将被写出;否则,该字符将被排除

    实例:

    1、显示/etc/grub.conf里第1个字符

    cut -c1 /etc/grub.conf

    2.显示/etc/grub.conf里第1个到第20个字符

    cut   -c1-20   /etc/grub.conf

    3.显示/etc/passwd里,以冒号分隔的第1列到第3列

    cut  -d':'  -f1-3   /etc/passwd

    4.显示/etc/passwd里,以冒号分隔的第1列和第3列

    cut  -d':' -f1,3   /etc/passwd

    1.4.2 sort

    linux sort命令用于将文本文件内容加以排序。

    sort可针对文本文件的内容,以行为单位来排序。

    参数 含义
    -b 忽略每行前面开始的空格字符
    -c 检查文件是否已经按照顺序排序
    -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符
    -f 排序时,将小写字母视为大写字母
    -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
    -m 将几个排序好的文件进行合并
    -M 将前面3个字母依照月份的缩写进行排序
    -n 依照数值的大小排序
    -o<输出文件> 将排序后的结果存入指定的文件
    -r 以相反的顺序来排序
    -u 去除重复行
    -t<分割字符> 指定排序时所用的栏位分割字符
    +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

    例子

    1、查看/etc/passwd里的内容并且正向排序

    sort /etc/passwd

    2、去除重复行

     3、反向排序

    sort默认的排序方式是升序(不识别十位数)

     4、将排序的内容输出到指定的文件

     5、按照数值大小排序

     6、sort -t和-k的用法

    根据第二列数据进行排序

     1.4.3 uniq

    参数 含义
    -i 忽略大小写字符的不同
    -c 进行计数
    -u 只显示唯一的行

    例子:

    1、排序之后删除了重复行,同时在行首位置输出该行重复的次数

    sort 11.txt | uniq -c

     2、仅显示存在重复的行,并在行首显示该行重复的次数

    sort 11.txt | uniq -dc

    3、仅显示不重复的行

    sort 11.txt | uniq -u

     1.4.4 wc

    wc命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

    参数 含义
    -c 显示文件的Bytes数(字节数)及文件名输到屏幕上
    -l 将每个文件的行数及文件名输出到屏幕上
    -m 将每个文件的字符数及文件名输出到屏幕上,如果当前系统不支持多字节字符将其显示与-c参数相同的结果
    -w 将每个文件含有多少个词及文件名输出到屏幕上
    -L 显示最长一行字符数

    例子:

    wc -l /etc/passwd
    22 /etc/passwd
    
    cat /etc/passwd | wc -l
    25
    
    echo    `123456` | wc -L 
    6

     1.5 find文件查找工具

    1.5.1find工具详情

    参数 说明
    -type 类型
    -name 以什么*命名的
    -iname 以参数的效果和指定“-name”参数类似,但你忽略字符大小写的差别
    -mtime 修改时间
    -ctime 创建时间
    -maxdepth find命令查找的最大深度(tree -L 1 -d)
    -size 文件大小(大于1M是+1M)
    -perm 按照文件权限来查找文件
    -user 按照文件属主来查找文件
    -group 按照文件所属的组来查找文件
    -inum 根据inode号查找文件

    查找文件

    find ./ -type f

     查找目录

    find ./ -type d

     

     查找名字为test的文件或目录

    find ./ -name test

    查找文件名匹配*.c的文件

    find ./ -name '*.log'

    打印test文件名后,打印test文件的内容

    find ./ -name test -print -exec cat {} ;

    不打印test文件名,只打印test文件的内容

    find ./ -name test -exec cat {} ;

    查找文件更新日时在距现在时刻二天以上的文件

    find ./ -mtime +2

    查找空文件并删除

    find ./ -empty -type f -print -delete

    查找权限为644的文件或目录(需完全符合)

    find ./ -perm 664

    查找有执行权限但没有可读权限的文件

    find ./ -executable ! -readable

    查找文件size小于10M的文件或目录

    find ./ -size -10M
  • 相关阅读:
    Beginning Silverlight 4 in C#数据绑定和Silverlight List控件
    使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
    分布式事物:第一章:分布式事物简介
    Redis数据结构存储系统:第三章:Redis在项目中如何使用?
    Android “NetworkOnMainThreadException”出错原因及解决办法
    asp.net 运行时, 报控件不存在
    Only the original thread that created a view hierarchy can touch its views
    android模拟器打开时比较慢,Run As就找不到模拟器
    db2数据库还原
    去掉代码中自动生成的TODO Autogenerated method stub
  • 原文地址:https://www.cnblogs.com/lny916/p/13994812.html
Copyright © 2011-2022 走看看