zoukankan      html  css  js  c++  java
  • Shell脚本基础知识

    Shell 脚本是系统命令的堆积,用于简化操作步骤,提高效率,减少人为干预,减少系统故障。在学习 Shell 之前必须会熟练的手动运用系统命令,不会手动搭建或者执行某些程序,那么一定学不会 Shell

    toc
    脚本的基本格式和执行方式

    ## 基本格式
    [root@Shell ~]# vim test.sh
    #!/bin/bash
    echo "Hello world"
    ## 运行脚本
    [root@Shell ~]# chmod +x test.sh
    [root@Shell ~]# ./test.sh
    Hello world

    Shell常用字符

    • 命令排序
      • ; 没有逻辑关系,无论分号前面的命令执行是否成功都执行后者命令
      • && 前面执行成功, 则执行后者
      • || 前面执行不成功, 则执行后者
    • shell 通配符
        • 匹配任意多个字符
      • ? 匹配任意一个字符
      • [] 匹配括号中任意一个字符和一定范围的字符,比如a-z,0-9,A-Z,a-Z
      • () 会在子 shell 中执行
      • {} 按顺序逐个匹配,比如 touch file{1..9}
      • 转义符
    • echo输出颜色、printf 格式化输出文本
      • echo -e "33[30m 黑色字 33[0m"
      • echo -e "33[31m 红色字 33[0m"
      • echo -e "33[32m 绿色字 33[0m"
      • echo -e "33[33m 黄色字 33[0m"
      • echo -e "33[34m 蓝色字 33[0m"
      • echo -e "33[35m 紫色字 33[0m"
      • echo -e "33[36m 天蓝字 33[0m"
      • echo -e "33[37m 白色字 33[0m"
    • shell 中的特殊指令
      • trap "" INT QUIT TSTP 禁止 ctrl+c 退出脚本(慎用)

    Shell脚本变量

    简单的理解变量: 用一个固定的字符串去表示不固定的内容

    [root@Shell ~]# a=1
    [root@Shell ~]# b=2
    [root@Shell ~]# echo $a
    1
    [root@Shell ~]# echo $b
    2

    变量常见类型

    自定义变量
    系统环境变量
    位置参数变量
    预先定义变量

    1. 自定义变量
      1. 定义变量:变量名=变量值 ,不允许数字命名, 不能使用横岗命名
      2. 引用变量:$变量名 或 ${变量名}
      3. 查看变量:echo $变量名 set显示所有变量,包括自定义变量和环境变量
      4. 取消变量:unset 变量名 作用范围:仅在当前 shell 中有效
    2. 系统环境变量
      1. 定义环境变量:export export 变量 ,将自定义变量转换成环境变量
      2. 引用环境变量:$变量名 或 ${变量名}
      3. 查看环境变量:echo $变量名 env |grep Name
      4. 取消环境变量:unset 变量名
      5. 变量作用范围:在当前shell和子shell有效
    3. 位置参数变量
      1. 脚本参数传参: $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
    4. 预先定义变量
      1. $0 脚本文件名
      2. $* 所有的参数
      3. $@ 所有的参数
      4. $# 参数的个数
      5. $$ 当前进程的 PID
      6. $! 上一个后台进程的 PID
      7. $? 上一个命令的返回值 0 表示成功

    可以写个脚本测试一下

    [root@Shell ~]# vim variable.sh
    #!/bin/bash
    echo " 第 3 个位置参数是$3"
    echo " 第 2 个位置参数是$2"
    echo " 第 1 个位置参数是$1"
    echo " 所有参数是: $*"
    echo " 所有参数是: $@"
    echo " 参数的个数是: $#"
    echo " 当前进程的 PID 是: $$"
    echo '$4='$4
    echo '$5='$5
    echo '$6='$6
    echo '$*='$*
    echo '$@='$@
    echo '$#='$#
    echo '$$='$$
    [root@Shell ~]# chmod +x variable.sh
    [root@Shell ~]# ./variable.sh 1 2 3 4 5 6

    变量赋值方式

    变量名=变量值

    number=192.168.1.1
    name="Songguoyou"
    var1=`date +%F`
    var2=$(date +%F)
    • 使用 read 函数从键盘读入变量值
      • read -p 提示语句
      • read -n 最大字符数
      • read -t 等待时间(秒)
      • read -s 屏幕不显示输入内容
    read 变量名
    read -p "提示信息: " 变量名
    read -t 5 -p "提示信息: " 变量名
    read -n 2 变量名
    [root@Shell ~]# vim ping.sh
    #!/bin/bash
    read -p "Input IP: " ip
    ping -c2 $ip &>/dev/null
    if [ $? -eq 0 ];then
    echo "host $ip is ok"
    else
    echo "host $ip is fail"
    fi
    [root@Shell ~]# chmod +x ping.sh
    [root@Shell ~]# ./ping.sh 192.168.1.1

    注意事项: 定义或引用变量时注意事项: "弱引用"'强引用'

    [root@Shell ~]# namel=Songguoyou
    [root@Shell ~]# echo "${name} is good"
    Songguoyou is good
    [root@Shell~]# echo '${name} is good'
    ${name} is good

    ``和 $() 一样,里面的 shell 命令会被先执行

    [root@Shell ~]# touch `date +%F`_file1.txt
    [root@Shell ~]# touch $(date +%F)_file2.txt

    变量数值运算

    ## 整数运算 expr +(加) -(减) *(乘) /(除) %(余)
    expr 1 + 2
    expr $num1 + $num2
    ## 整数运算 $(())  +(加) -(减) *(乘) /(除) %(余)
    echo $((5-3*2))
    echo $(($num1+$num2))
    ## 整数运算 $[] +(加) -(减) *(乘) /(除) %(余)
    echo $[5+2]
    ## 整数运算 let +(加) -(减) *(乘) /(除) %(余)
    let sum=2+3;
    echo $sum
    ## 小数运算 bc let +(加) -(减) *(乘) /(除) %(余)
    echo "2*4" |bc
    echo "print 5.0/2" |python

    变量删除替换

    变量删除

    [root@Shell ~]# url=www.songguoyou.com.cn
    ## 获取变量值的长度
    [root@Shell ~]# echo ${#url}
    ## 从前往后,切下去第一个点之前的
    [root@Shell ~]# echo ${url#*.}
    ## 从前往后,切下去最后一个点之前的
    [root@Shell ~]# echo ${url##*.}
    ## 从后往前,切下去第一个点之后的
    [root@Shell ~]# echo ${url%.*}
    ## 从后往前,切下去最后一个点之后的
    [root@Shell ~]# echo ${url%%.*}

    切片

    ## 从第0个字符开始,保留之后的5个字符
    [root@Shell ~]# echo ${url:0:5}
    ## 从第5个字符开始,保留之后的5个字符
    [root@Shell ~]# echo ${url:5:5}
    ## 从第5个字符开始,保留之后的所有字符
    [root@Shell ~]# echo ${url:5}

    变量替换

    ## 把songguoyou替换成baidu
    [root@Shell ~]# echo ${url/songguoyou/baidu}
    ## 第一个n替换成N
    [root@Shell ~]# echo ${url/n/N}
    ## 所有n替换成N
    [root@Shell ~]# echo ${url//n/N}

    变量替代
    变量没有被赋值:会使用“新的变量值“ 替代
    变量有被赋值: 不会被替代

    ## 空值不会替换
    [root@Shell ~]# echo ${url-www.baidu.com}
    ## 空值会被替换
    [root@Shell ~]# echo ${url:-www.baidu.com}

    变量自增

    ## 先赋值,再运算
    [root@Shell ~]# let var=i++ 
    ## 先运算,再赋值
    [root@Shell ~]# let var=++i 
  • 相关阅读:
    (一)SAPI简述
    一、初识T4引擎
    (二)语音合成测试案例
    (三)语音合成器实例
    四、分离T4引擎
    二、T4模板
    三、T4模板与实体生成
    禁用浏览器缓存
    js_function
    asp.net(C#)读取文件夹和子文件夹下所有文件,绑定到GRIDVIEW并排序 .
  • 原文地址:https://www.cnblogs.com/songguoyou/p/11884211.html
Copyright © 2011-2022 走看看