linux--shell学习一条龙服务(上)

简介: linux--shell学习一条龙服务(上)


       本篇文章适于已经把shell学习完的人员人来进行参考的,不太始于零基础来,参考学习,零基础更适于观看视频学习shell

Shell概念

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

Bash特性

Shell类型:

/bin/sh

/bin/bash

/sbin/nologin

/usr/bin/sh

/usr/bin/bash

/usr/sbin/nologin

引号类型:

     单引号:无视特殊字符

      双引号:识别特殊符号

      无引号:连续的字符可以不加引号

      反引号:引用命令执行结果,等于$()用法

输入输出重定向

设备名    文件描述符    类型

      /dev/stdin      0     标准输入

      /dev/stdout   1     标准输出

      /dev/stderr    2     标准错误输出


变量类型和加载

变量配置文件

      用户个人配置文件:~/.bash_profile,~/.bashrc远程登录用户特有文件

      全局配置文件:/etc/profile,/etc/bashrc,全局配置文件,影响所有登录系统的用户

声明变量:declare,typeset

declare -i num      #声明整数变量

declare -r readonly      #声明只读变量

declare -a arr=‘([0]=”a” [1]=”b” [2]=”c”)’   #生成数组变量

 检查系统环境变量的命令:


             set:输出所有变量,包括全局变量,局部变量

             env:只显示全局变量

             declare:输出所有变量

             export:显示和设置环境变量值

 撤销环境变量

             unset 变量名,删除变量或函数

      设置只读变量

             直接readonly显示当前系统只读变量

             readonly name只读变量

      特殊变量

   $0:获取shell脚本文件名,以及脚本路径

             $n:获取shell脚本的第n个参数,n在1~9之间,参数需要空格隔开

             $#:获取执行的shell脚本后面的参数总个数

             $*:获取shell所有参数

            @@:同*,如果加了双引号,会把所有参数为独立的字符串分开

 特殊状态变量


             $?:上次命名执行状态,0正确,其他为失败

             $$:当前shell的进程号

             $!:上一次后台进程PID

             $_:获取上一次执行的命令的最后一个参数

 特殊shell扩展变量


             ${parameter:-word}     #如果parameter变量值为空,返回word字符串

             ${parameter:=word}     #如果parameter变量为空,则word替代变量值,且返回

             ${parameter:?word}      #如果parameter变为空,word当作错误输出,否则正常输出

             ${parameter:+word}     #如果变量为空,什么都不做,否则word返回

内置shell命令

echo命令

选项:

       -n:不换行

      -e:解析字符串中的特殊字符

             \n换行

             \回车

             \t制表符

             \b退格

printf命令

      作用:打印与echo相同

      与echo的区别:自动识别特殊字符,不自动添加换行符

eval命令

      作用:执行多个命令

      格式:eval 命令;命令;命令

exec命令

      作用: 不创建子进程,执行后续命令;并执行完毕后,自动exit退出

Shel字串的花括号用法

${变量名}:返回变量值

${#变量名}:返回变量长度,字符长度


截取:

${变量名:start}:返回变量start数值之后的字符,start是数字

${变量名:start:stop}:返回变量从start下标到stop的所有字符


删除:

${变量名#word}:从变量开头删除最短匹配的word字串

${变量名##word}:从变量开头删除最长匹配的word字串

${变量名%word}:从变量结尾删除最短的word字串

${变量名%%word}:从变量结尾删除最长匹配的word字串


替换:

${变量名/pattern/string}:用string代替第一个匹配的pattern字串

${变量名//pattern/string}:用string代替所有的pattern字串

内置命令,外置命令

内置命令:在系统启动时就载入内存,常驻内存,执行效率高,但是占用资源

外置命令:用户需要从硬盘中读取程序文件,再读入内存加载

Shell运算符


1.算数运算符

逻辑概念:真为1  假为0

shell中常见的算数运算命令

(())          用于整数运算的常用运算符,效率高

let          用于整数运算,类似(())

expr        可用于整数运算,但是还有很多其他功能

bc          计算器程序(适合整数及小数运算)

$[ ]         用于整数运算

awk        awk既可以整数运算,和小数运算

declare   定义变量值和属性,-i参数可以用于定义整形变量做运算


特殊符号符号

++:自增

--:自减


2.关系运算符

运算符       说明

-eq    检测两个数是否相等

-ne    检测两个数是否不同

-gt    检测第一个数值是否大于右边数值

-lt      检测第一个数值是否小于右边数值

-ge    检测第一个数值是否大于等于右边的数值

-le     检测第一个数值是否小于等于第二个数值


3.逻辑运算符

运算符       说明

!              非运算,取反

-o             或运算,第一个表达式为true则返回true

-a              与(并且)运算,所有表达式都为true才返回true


4.字符串运算符

运算符               说明

=                       检测两个字符是否相等

!=                   检测两个字符是否不相等

-z                      检测字符串长度是否为0

-n                      检测字符串长度是否不等于0

str                     检测字符串是否为空


5.文件测试运算符

操作符               说明

-b file        检测文件是否是块文件

-c file         检测文件是否是字符设备文件

-d file        检测文件是否是目录

-f file                 检测文件是否是普通文件

-p file        检测文件是否是有名管道

-g file        检测文件是否设置了SGID位

-k file         检测文件是否设置了粘着位

-u file        检测文件是否设置了SUID位

-r file         检测文件是否可读

-w file                检测文件是否可写

-x file         检测文件是否可执行

-s file         检测文件是否为空

-e file         检测文件是否存在


接受键盘输入

read [选项] [变量名]

选项:

      -a:后面跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。

      -p:提示信息:在等待read输入时,输出提示信息

      -t:秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间

      -n:数字:read命令只接受指定的字符数,就会执行

      -s:隐藏输入的数据,适合机密信息的输入

      -d:后面跟一个标志符,其实只是其后的第一个字符有用,作为结束的标志

      -e:在输入的时候可以使用命令补全功能


变量名:

      变量名可以自定义,如果不指定变量名,会把输入保存默认变量REPLY

      如果只提供了一个变量名,则整个输入行赋予给变量

      如果提供了一个以上的变量,则输入行分为若干字,一个接一个的赋予各个变量,而命令行上的最后一个变量取得剩余的所有字


流程控制


单分支if语法:

      if [ 条件判断式 ]

             then

                    程序

      fi

双分支if条件语句

      if [ 条件判断式 ]

             then

                    条件成立时,执行的程序

             else

                   条件不成立,执行的另一个程序

      fi


多分支if条件语句

      if [ 条件判断式1 ]

             then

                    当条件判断式1成立时,执行程序1

      elif [ 条件判断式2 ]

             then

                    当条件判断式2成立时,执行程序2

      else

                    当所有条件都不成立,最后执行程序

      fi


多分支case条件语句

      case $变量名 in

             “值1”)

             如果变量的值等于值1,则执行程序1

             ;;

             “值2”)

             如果变量的值等于值2,则执行程序2

             ;;

             *)

             如果变量的值都不是以上的值,则执行此程序

             ;;

      esac


循环语句


for语法一:

for 变量 in 值1 值2 值3 (可以是一个文件等)

do

        程序

done

注:这种语法中for循环的次数,取决于in后面值的个数(空格分割),有几个值就循环几次,并且每次循环都把值赋予变量。


for语法二:

for ((初始值;循环控制条件;变量变化))

        do

                程序

        done


注:语法二注意:


初始值:在循环开始时,需要给某个变量赋予初始值,如i=1

循环控制条件:用于指定变量循环次数,如i<=100,则只要i的值小于等于100,循环就会继续

变量变化:每次循环之后,变量该如何变化,如i=i+1。代表每次循环之后,变量i的值都加1

while循环语法:

while [ 条件判断式 ]

        do

                程序

        done

until循环语法:

until [ 条件判断式 ]

        do

                程序

       done


注:和whlie循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序,一旦循环条件成立,则终止循环。

函数

语法:

function 函数名 () {

        程序

}

特殊流程控制语句



目录
相关文章
|
1月前
|
存储 安全 Linux
|
1月前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
44 5
linux系统服务二!
|
1月前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
44 3
linux系统服务!!!
|
1月前
|
Linux Shell 数据安全/隐私保护
|
1月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
199 3
|
1月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
93 3
|
2月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
2月前
|
Ubuntu Linux 网络安全
Linux中服务管理问题
【10月更文挑战第4天】
28 2
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
78 12
|
2月前
|
网络协议 Linux
linux学习之套接字通信
Linux中的套接字通信是网络编程的核心,允许多个进程通过网络交换数据。套接字提供跨网络通信能力,涵盖本地进程间通信及远程通信。主要基于TCP和UDP两种模型:TCP面向连接且可靠,适用于文件传输等高可靠性需求;UDP无连接且速度快,适合实时音视频通信等低延迟场景。通过创建、绑定、监听及读写操作,可以在Linux环境下轻松实现这两种通信模型。
41 1