Shell简简单单

一、是什么

        可以简单的理解为人机语言交互的翻译官

二、怎么用

        1、查看当前操作系统支持的解析器

                cat /etc/shells

        2、查看当前操作系统默认的解析器

                echo $SHELL或者env |grep SHELL

                一般为/bin/bash,特别的/bin/sh实际也是软链接到/bin/bash

        3、Shell格式

                脚本文件以.sh或无后缀结尾

                脚本内容以#!/bin/bash或#!/bin/sh开头

        4、脚本的执行

                1)bash xxx.sh或sh xxx.sh或./xxx.sh(./xxx.sh本质是当前用户自己执行脚本,故需要有执行权限)

                2)source xxx.sh或. xxx.sh

                说明:方式1会启一个子shell进程来执行脚本,方式2则会使用当前bash进程来执行脚本,区别在于方式1存在环境变量不共用或同步的场景,而方式2可以避免此类问题

        5、查看系统预定义变量

                set或env

                两者区别在于set涉及的范围大,而env则小些

        6、自定义变量

                格式:key=value        注:=两边不能加空格,默认value是字符串类型,key或value中有空格时需要使用''或""括起来

                使用:echo $key

                撤销变量:unset key

                定义一个只读变量:readonly key=value        注:该变量无法撤销,系统重启销毁

                将变量提升为全局变量:export key        注:在子shell中修改全局变量,不影响父shell

                扩展:将当前目录设置为可执行脚本目录,需要将目录添加到$PATH中

                        echo "export PATH=$PATH:/指定目录" >> /etc/profile
                        source /etc/profile

        7、特殊变量

                1)$n        注:n位数字,0代表脚本名称,1-9代表脚本参数位,超过10,使用${10}表示,示例:./test.sh adc de,$0值位test.sh,$1值为abc,$2值为de

                2)$#        注:表示脚本参数的个数,常用于内部循环判断

                3)$*        注:表示把所有参数看为一个整体

                4)$@        注:表示把所有参数看为一个集合,与3)的区别在于使用"$*"时表示一个整体,"$@"表示一个集合,而不使用""时,两个均是集合

                5)$?        注:返回上一条命令的执行结果,0表示正常或成立,非0表示异常或不成立

        8、运算符

                语法:$((运算式))或$[运算式]        注:此处使用运算符可以使用数学运算符

                           或expr {+,-,\*,/,%}        注:expr的运算符之间必须有空格,示例:expr 1 + 2,嵌套运算expr `expr 1 + 2` \* 3

        9、条件判断

                语法:[ condition ]        注:condition前后需有空格,如condition非比较,则有值为true

                值比较:=或!=用于字符串比较,如下比较符用于数值比较,示例:[ 1 -eq 2 ]

-eq等于-ne不等于
-lt小于-le小于等于
-gt大于-ge大于等于

                权限比较:-r 有读权限,-w 有写权限,-x有操作权限

                文件类型比较:-e 文件存在,-f 是文件,-d 是目录

                三元运算符:[ condition ] && value1 || value2

        10、流程控制

                1)if

单分支:
if [ condition ]
then
    程序
fi
多分支:
if [ condition ]
then
    程序
elif [ condition ]
then
    程序
else
    程序
fi

                         说明:if后必须有空格,多个condition条件可用&&拼接多个[]或使用-a连接多个条件,同理也可使用||或-o,特别的,为避免获取参数为null,可使用"$1"x = "abc"x

                2)case

case $变量 in
"value1")
    程序1
;;
"value2")
    程序2
;;
*)
    程序3
;;
esac

                        说明:等同于java中的switch-case,;;同break语句,*)同default语句 

                3)for

for((i=0;i<=100;i++))
    do
        程序
    done
或
for 变量 in value1 value2...
    do
        程序
    done
或
for 变量 in {value1 value2...}
    do
        程序
    done

                        说明:{}表示一个序列,{1..100}表示从1到100,in类型的循环表示将后面的值逐个赋给前面的变量

                4)while

while[ condition ]
    do
        程序
    done

                注:像sum=$[ $sum + $a ]的运算可通过let关键字来使用编程类语言,使用示例let sum+=a

        11、读取控制台输入

                格式:read option 变量

                示例:read -t 7 -p "Enter your name:" NAME

                           echo $NAME

                说明:-t表示等待时间,无-t参数则一直等待;-p表示指定提示符

        12、函数

                1)系统函数

                        ①basename

                        格式:basename {string/path} [suffix]

                        示例:basename /usr/local/abc.sh        输出结果为abc.sh

                                   basename /usr/local/abc.sh .sh        输出结果为abc

                        说明:basename会获取最后一个/之后的字符,无suffix参数时直接输出,有suffix时则去掉字符的suffix后缀再输出

                        ②dirname

                        格式:dirname 文件全路径

                        示例:dirname /usr/local/abc.sh        输出结果为/usr/local

                2)自定义函数

[function] functionname[()]
{
    程序
    [return i;]
}

                        说明:[]内的内容选择性可写,return也可以使用$?来获取结果,i的取值范围是0~255 

示例:

function add()
{
    s=$[$1+$2]
    echo $s
}
read -p "请输入第一个参数:" a
read -p "请输入第二个参数:" b
sum=$(add $a $b)

三、Shell工具

        1、cut剪切数据

                格式:cut [option] filename

                参数:-f指需要提取的列号,-d指指定的分隔符,默认为制表符"\t",-c指按字符切割

                示例:cat /etc/passwd |grep bash$ |cut -d ":" -f 1,6,7

                说明:-f 3-表示按指定分隔符切割后第3列之后所有的列

        2、sed动作编辑

                格式:sed [option] command filename

                参数:-e指直接在指令列模式上进行编辑

                command:a表示新增,a后跟字符串则增加到下一行,d表示删除,s表示查找并替换

                说明:sed命令不会修改源文件内容,只是修改打印在控制行的数据

                示例:

                        1)在某文件指定行的下一行追加内容

                        sed "na 内容" filename

                        说明:n指定行号

                        2)删除指定内容

                        sed "/内容/d" filename

                        3)替换指定内容

                        sed "s/old/new/g" filename

                        说明:g表示全局替换

                        4)删除并替换

                        sed -e "nd" -e "s/old/new/g" filename

        3、awk切片

                格式:awk [option] '/part1/{action1} /part2/{action2}' filename

                说明:part指awk在数据中查找的内容,action指匹配成功后的操作

                参数:-F指定分隔符,默认空格,-v指赋值一个用户定义变量

                示例:cat /etc/passwd |awk -F ":" '/^root/{print $1","$6","$7}'

                给输出结果添加头尾: awk -F ":" 'BEGIN{print "Hello"}{print $1","$7}END{print "World"}' /etc/passwd

        4、sort排序

                语法:sort option filename

                参数:-n表示按照数值大小排序,-r表示逆序排列,-t用来设置排序时所用的分隔符,-k表示需要排序的列

                

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值