Shell基础

一. Shell的概述

Shell的分类
# Bourne Shell:从1979年起Unix就开始使用Bourne Shell
Bourne Shell的主文件名叫sh ,现在基本被淘汰了

# C Shell: C Shell主要在BSD版的Unix中使用,其语法和c语言相类似而得名
  Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容,Bourne家族主要包括sh,ksh,Bash(当前linux中的标准Shell),psh,zsh;
  C家族主要包括csh,tcsh(这两个主要是给unix用的  )
  (执行echo $SHELL就可以看到用的是哪个版本的Shell了,我的是/bin/bash)
  Bash: Bash与sh兼容,现在使用的linux就是使用Bash作为用户的基本Shell,可以打开/etc目录下的shells文件查看支持那些版本
# 终端输入sh回车,就是用Bourne Shell,exit就是退出sh

二.脚本执行方式
1. echo输出命令
echo [选项] [输出内容]
选项:
-e:支持反斜线控制的字符转换
例如: echo “just do it” (也可以不加引号)
echo -e “hello!!” (这里如果不加双引号就不行了)

# 输出颜色
echo -e “\e[1;31m嫁人就要嫁凤姐\e[0m”

    30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色

    这里\e代表调用颜色
        [1代表开启颜色选项
        \e[0m代表关闭颜色
   终端下ctrl+shift+c  复制 
         ctrl+shift+v  粘贴
linux中#代表注释,不过脚本中#!bin/bash不是注释,代表下面写的是linux标准脚本,不可省略

2.第一个脚本
#!/bin/bash
#这里#是注释,但是上面的一句一定不能省

 #这是第一个shell脚本
 echo -e "\e[1;34m 天上掉下个林妹妹!\e[0m"
  1. 脚本执行
    1)赋予执行权限,直接运行
    chmod 755 hello.sh (chmod 更改文件属性,修改文件权限)
    ./hello.sh (.表示当前路径)
    2)通过Bash直接执行脚本(这种方式不会赋予执行权限的)
    bash hello.sh

三. Bash的基本功能

  1. 命令别名与快捷键
    别名: 有些命令很长,敲起来麻烦,起个别名就方便多了或者操作系统升级,命令格式变了,自己习惯用之前的格式,用新的格式觉得很别扭,那么自己定义别名不就行了

                             查看与设定别名                             
    

    alias
    #查看系统中所有命令的别名
    alias 别名=’原命令’ (alias 别名,化名为)
    #设定命令别名(不过这样命名关机后,这个别名就会丧失作用)

                        别名永久生效和删除别名
    

    vi ~/.bashrc (~代表家目录,如果是root用户就是root)

    #写入环境变量配置文件
    比如vi root/.bashrc
    然后在里面加上alias rn=’rm -i’
    保存后退出就可以永久生效了,但是这个别名只会在下次登录之后才会生效,要想立即生效,只要执行
    source .bashrc 就可以了

    unalias 别名
    #删除别名(要彻底删除还得得在配置文件中去掉)

            命令生效顺序
     第一顺序位执行用绝对路径或相对路径执行的命令
     第二顺序位执行别名
     第三顺序位执行Bash的内部命令
     第四顺序位执行按照$PATH环境变量定义的目录查找顺序查找到的第一个命令
    
            常用快捷键
    ctrl+c          强制终止当前命令
    ctrl+l          清屏
    ctrl+a          光标移动到命令行首
    ctrl+e          光标移动到命令行尾
    ctrl+u          从光标所在位置删除到行首
    ctrl+z          将命令放入后台
    ctrl+r          在历史命令中搜索
    
  2. 历史命令(可以用上下箭头调用之前操作过的命令)
    1) history [选项] [历史命令保存文件]
    选项:
    -c: 清空历史命令(建议不要清空历史命令,1,如果出现错误,可以通过历史命令尝试排错,2.如过有外来入侵者,他的第一反应就是起清空历史命令,如果
    比较粗心的话,会把所有的历史命令都清空,这样我们就知道有其他人登录过自己的操作系统了,而且历史命令被保存在文件中,不会占用太多资源)
    -w: 把缓存中的历史命令写入历史命令保存文件~/.bash_history

    如果什么都不跟,就会列出所有历史命令(这些命令也包括上次注销之前正确保存的历史命令)
    而打开比如root用户的(/root/.bash_history)文件,里面是上次注销之前正确保存的历史命令,而当前登录的用户使用
    过的命令不在这里面,不过可以执行history -w把缓存中的历史命令写入

    #历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改

    #历史命令的调用
    使用上,下箭头调用以前的历史命令
    使用”!n“重复执行第n条历史命令
    使用”!!“重复执行上一条命令
    使用”!字符串“重复执行最后一次以该字符串开头的命令

    2) 文件与命令补全
    #在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按”Tab”键就会自动补全
    #命令补全依赖环境变量,文件和目录补全依赖操作路径

  3. 输出重定向

    1) >
    执行命令时直接回车,结果会显示在屏幕上,但是比如服务器,一般都是人少的时候(凌晨4,5点)查看数据,难道你这个时候就上班?一直盯
    着电脑看?肯定不是的,可以利用输出重定向,比如ifconfig > test.log 这样就把原本显示在屏幕上的信息写入文件test.log了(后面会说
    定时任务,不需要自己担心),如果test.log不存在,会新建一个test.log文件,但是如果存在,再执行写入test.log后,test.log文件里
    的 内容会被覆盖,即之前写入的文件没有了,被新写入的文件覆盖

    2)>> 
         这个就不会被覆盖了,即追加
       但是这种命令只能保存标准正确输出,如果你命令敲错了,那么会在屏幕上显示错误信息,而不是写入文件(而且如果是用>,命令敲错了,test
       里就是空白了,>>则保持原来的内容)
    
    3) 2>和2>>
         前面加个2就可以保存错误信息了(这个只能保存错误信息,如果是正确的则会显示在屏幕上)
        这个命令不常用,没什么鸟用处,知道是错误的,为什么还要保存呢?脑子进水了?
    
                                    正确输出和错误输出同时保存
    4)命令 > 文件 2>&1  //等价:命令 &> 文件
    以覆盖的方式,把正确输出和错误输出都保存到同一个文件中
    
    5) 命令 >> 文件 2>&1    //等价:命令 &>> 文件
    如果命令正确,直接写入文件,如果错误,就传到2,将错误信息写到将写在正确的1,在把正确的1写在文件里,结果就是(追加的方式)正确的信息会写入文件,错误的也         会
    

    6) 命令 >> 文件1 2 >> 文件2 正确的输出追加到文件1,错误的输出追加到文件2

    说一下/dev/null这个文件,是linux的“黑洞”,里面什么都没有,如果想执行一些命令但不想看到执行结果,可以 命令 &>> /dev/null,比如写脚本,程序时,只需要看到最终结 果,不需要看到中间一些输出,就可以这样做

    4 输入重定向
    wc [选项] [文件名]

    选项:
    -l 统计行数
    -w 统计单词数
    -c 统计字节数(包括换行符,空格,比如输入wc -c之后,输入1234空格6回车9回车,按ctrl+d,会输出9)

    终端输入wc,回车,就可以随便输入,按下ctrl+d结束输入,然后会输出上面选项中的三个数,比如只想看单词数,加上选项-w

    命令 < 文件 把文件作为命令的输入(本来wc是从键盘输入,可以wc << 文件,或者直wc 文件),了解就够了,用的很少
    命令 << 标识符(比如wc << abc,回车后就可以输入了,遇到输入abc就会结束输入) //用得更少

    标识符把标识符之间内容作为命令的输入

四:管道符

1:多命令顺序执行

    多命令执行符      格式          作用
        ;           命令1;命令2    多个命令顺序执行,命令之间没有任何逻辑关系
        //比如date;tar -zcvf etc.tar.gz /etc;date,然后根据时间就可以看tar命令执行了多长时间,不过要注意,不管其中的命令有没有报错,其他命令还会继续执行

        &&          命令1&&命令2       逻辑与,当1正确才会执行2,否则不会执行2

        ||          命令1||命令2       和c,c++一样的,当1正确,不执行2,否则执行2

    可以这样检测命令是否输入正确: 命令 && echo "yes" || echo "no"

2: 管道符
    命令格式:
        命令1 | 命令2
        #命令1的正确输出作为命令2的操作对象,要求是命令2必须可以操作命令1的对象

       more是分屏查看文件内容的,比如/etc目录下的文件非常多,ll后看起来非常不方便,可以ll /etc >> file,然后more file,有了管道符,久可以直接ll /etc | more了

     !小技巧:  说一个常见命令:netstat -an 
          #查看系统当中所有网络连接
    命令执行后输出内容非常多,主要看的是网络端口,分为LISTEN(指的是该端口被监听,等待有人访问),而ESTABLISHED是有人正在连接22端口网即用远程工具连接的端口               ),如果在真正的服务器上,只要有一个ESTABLISHED,就说明有一个客户端连接了该服务器

    只想查看ESTABLISHED:netstat -an | gerp ESTABLISHED  //可以不加双引号

    但是真正的服务器上真正连接的可能有很多,成百上千,可以这样,用统计命令wc:
        netstat -an | grep | wc -l
    直接显示数量  


3:通配符(主要匹配目录名或者文件名称,如果要匹配文件当中的数据,是用正则表达式)   
    linux中通配符其实不多,主要是三种? * []

    通配符     作用
     ?      匹配一个任意字符
     *      匹配0个或任意多个任意字符,即匹配任何内容
     []         匹配中括号中任意一个字符,例如[abc]代表匹配一个字符,或者是a,或者b,或者c

     [-]        匹配中括号中任意一个字符,-代表一个范围,比如:[a-z],匹配小写字母
     [^]        逻辑非,表示匹配不是中括号内的一个字符。例如[^0-9]表示匹配不是数字的字符


    # Bash中其他特殊符号
    符号      作用
     ''     在单引号中所有的特殊符号,如'$','`'(反引号)等都没有特殊含义
    ""      在双引号中特殊符号都没有特殊含义,但是"$","`",和"\"是例外,拥有"调用变量的值",”引用命令“和”转义符“的特殊含义
    ``      反引号,反引号括起来的内容是系统命令,在Bash中会先执行它,和$()作用一样,不过推荐使用$(),因为反引号非常容易看错
            例如,想讲ls后的结果赋值给变量a,如果直接a=ls,执行echo $a会输出ls,加了反引号就可以了,a=`ls`,echo $a

    $()        和反引号作用一样,用来引用系统命令
    #       在Shell脚本中代表注释
    $		用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值(比如a=123,a就是一个变量,echo $a就是输出123)
    \       转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值