• 【开发工具】Linux 服务器 Shell 脚本简单入门


    记录一下学习Shell编程的关键知识点,使用最通俗简洁的语句,让阅读者能快速上手Shell脚本的编写

    1.什么是Shell?

    Shell是一种常用于服务器运维的脚本语言。众所周知,脚本语言不需要编译器,只需要解释器。

    在各种Shell解释器中,sh,bash最常用,而bash是兼容sh的,目前市面上的Linux基本用的都是bash

    查看系统当前shell解释器

    echo $SHELL

    查看系统有的shell解释器

    cat /etc/shells

    2.编写第一个shell脚本

    新建一个.sh文件,比如 class1.sh,编写第一句脚本,保存。

    # echo的意思是输出语句。 PS.在不使用EOF方法的情况下,shell只有单行注释,前+#
    echo "Hello World!"

    把此.sh脚本设为可执行,再执行此脚本

    chmod +x ./class1.sh
    ./class1.sh

    3.使用变量

    编写一些变量的基础用法

    name="sima"               #定义一个变量
    echo $name #输出此变量,变量前+$
    echo "My name is ${name}"
    unset name #删除变量,删除后输出变量,没有任何输出
    read name #从控制台输入一个变量,赋值给name
    echo ${name} #输出此变量 +不+{}都一样

    执行此脚本得到

    只读变量的使用,执行后报错。

    name="sima"
    readonly name
    name="sima2"

    关于转义字符的替换这里不做过多描述,尽量精简,使用到的时候再百度就好。 

    4.命令行参数

    这个东西可以当做C#、java中的方法理解,一个.sh脚本类似一个方法,给这个方法传递参数,方法再使用这几个数进行计算。

    运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

    $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

    但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。、

    举个例子,新建一个脚本 class2.sh ,记得写完要赋予执行权限,运行。

    echo "filename: $0"
    echo "name: $1"
    echo "age : $2"
    echo "all : $@"
    echo "all : $*"
    echo "Total Number of Parameters : $#"

    运行sh文件

    ./class2.sh sima 25

    替换变量

     

    5.Shell运算符

    expr 是一款表达式计算工具,使用它能完成表达式的求值操作(若要计算浮点,请使用bc)。新建class3.sh脚本

    a=10
    b=20
    val=`expr $a + $b`
    echo "a + b : $val"
    
    if [ $a == $b ]
    then
       echo "a is equal to b"
    fi
    if [ $a != $b ]
    then
       echo "a is not equal to b"
    fi

    两点注意:

    • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    • 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

    脚本执行后输出的

    PS.在Windows下编写好sh文件后,在Linux下运行会报错,这是因为Windows系统的文件换行使用的是 ,而Unix系统是 。解决方法:

    # 使用vim打开文件
    vim class3.sh
    # 转换格式
    :set ff=unix
    # 保存文件
    :wq

     关系运算符及布尔运算符,使用例子

    a=10
    b=20
    
    if [ $a -lt 5 -o $b -gt 100 ]
    then
       echo "$a -lt 100 -o $b -gt 100 : returns true"
    else
       echo "$a -lt 100 -o $b -gt 100 : returns false"
    fi

     

    文件运算符

    6.Shell中的字符串

    单引号:任何字符都会原样输出,单引号字串中不能出现单引号。

    双引号:可以有变量,可以出现转义字符。

    拼接字符串,新建class4.sh脚本,输入,执行。

    your_name="sima"
    echo "hello, "$your_name" !"   
    echo "hello, ${your_name} !"
    echo "hello, $your_name !"       #字符串替换
    echo ${#your_name}               #字符串长度
    echo ${your_name:1:2}            #截取第2-3位字符串

     

     7. Shell中的数组

    新建class5.sh脚本,输入,执行。

    array=(sima 25 man)   #也可以 array[0]=sima  array[1]=25
    echo ${array[0]}      #某个下标的元素
    echo ${array[@]}      #数组全部元素
    echo ${array[*]}      #同上
    echo ${#array[@]}     #数组长度
    echo ${#array[*]}   #同上
    echo ${!array[@]}     #所有下标
    echo ${!array[*]}     #同上
    echo ${#array[1]}     #某个下标的长度

    printf

    格式:printf format-string [arguments...] 其中(format-string: 格式控制字符串、arguments: 参数列表)
    案例:printf "%-10s %-8s %-4.2f
    " 郭靖 男 66.1234
    %s %c %d %f 都是格式替代符
    d:Decimal 十进制整数 对应位置参数必须是十进制整数,否则报错!
    s:String 字符串 对应位置参数必须是字符串或者字符型 否则报错
    c:Char 字符 对应位置参数必须是字符串或者字符型 否则报错
    f:Float 浮点 对应位置参数必须是数字型 否则报错
    %-10s : 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
    %-4.2f :指格式化为小数,宽度为4个字符,其中.2指保留2位小数。
    其他转义字符在此省略.
  • 相关阅读:
    Android Studio中使用AAR包
    Unity Hub无法添加新模块解决办法
    WTM(基于Vue)项目发布记录
    企业微信自建应用开发
    企业微信接口上传临时素材
    cfw for ubuntu
    行锁,间隙锁,快照读,当前读的理解。
    spring容器之ApplicationContext
    select_poll_epoll
    百万级抽奖系统——redis的延时双删——数据库与缓存的数据一致性问题分析
  • 原文地址:https://www.cnblogs.com/simawenbo/p/14268020.html
Copyright © 2020-2023  润新知