LinuxShell编程

1:Shell

Shell:用户通过Shell与操作系统通信,而依赖于硬件操作是由内核管理的。Linux系统的Shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言。Linux系统的很多服务都是通过Shell脚本来启动,通过查看脚本,可以了解服务的启动过程,从而为故障诊断和系统优化做好准备。

  1. 它是命令语言、命令解释程序及程序设计语言的统称。每种操作系统都有其特定的Shell ,现在流行的有Bourne Shell(简称sh)、Korn Shell(简称ksh)、C-Shell(简称csh)。
    Linux的缺省Shell是Bash(Bourne Again shell) 。
  2. 查看Shell解释器bash的版本执行的命令为:bash –version,或打印环境变量BASH_VERSION的值来获得版本号。
  3. 用户在提示符下输入的命令都由Shell先解释然后传给Linux核心。

Shell功能:

  1. 命令解释器:shell接受用户输入的命令,进行分析,创建子进程,由子进程实现命令所规定的功能,等子进程终止后,发出提示符。
  2. 高级程序设计语言:shell具有编程功能,包括变量定义、系统关键字、各种逻辑控制语句等,而且还拥有自己的语法结构,是一套功能完善的程序设计系统。

在这里插入图片描述

Shell脚本执行的两种方式:

  1. sh+文件名执行
  2. chmod a+x 文件名 ./文件名执行

如果用户想让编写的Shell脚本像Shell提供的命令一样(直接输入命令)为每个用户使用,也就是开发出系统的新命令,可以在编写好的脚本上为所有用户加上执行权限后,将其放在命令搜索路径的目录之下(通常是/bin或/usr/bin等),这样就像普通命令一样进行使用。

2:Shell变量

Shell变量的名字可以由数字、字母和下划线组成。在Bash中,Shell变量的值总是字符串,变量的值没有长度限制。

Shell变量类型:使用变量: $变量名

  1. 环境变量
  2. 用户变量
A=100
echo A=$A
unset A #撤销变量A
echo A=$A 
readonly B=20 #静态变量不可撤销
echo B=$B

#####输出#####
A=100
A=
B=20
  1. $$(当前进程PID)
  2. $!(后台运行的最后一个进程PID)
  3. $?(最后一次执行的命令的返回状态,如果变量值为0证明上一个命令正确执行,如果非0则上一个命令不正确)

3:位置参数

  1. 执行Shell脚本时,如果希望获取到命令行参数信息,就可以使用到位置参数变量。
  2. $n(n为数字,0表示命令本身1/9代表第一到第九个参数,十以上的参数需要用大括号包含0表示命令本身 1/9代表第一到第九个参数,十以上的参数需要用大括号包含01/9{10})
  3. $*(变量代表命令行中所有的参数,将所有的参数看作一个整体)
  4. @(变量代表命令行中所有的参数,不过@(变量代表命令行中所有的参数,不过@(@将每一个参数区别对待)
  5. $#(变量代表命令行中所有参数个数,不包含命令本身)
echo "命令本身为$0"
echo "参数1=$1 ,参数2=$2"
echo "所有参数为$*"
echo "所有参数为$@"
echo "参数个数为$#"


####执行####
[root@centos7 home]# sh test.sh  1 2 
位置参数0号为命令本身=test.sh
位置参数1号=1
位置参数2号=2
位置参数整体(将所有的参数作为一个整体)=1 2
位置参数整体(区别对待每一个参数)=1 2
参数个数为=2 #不包含$0



####可以使用set设置位置参数####
set 1 2 3
echo $1 $2 $3
####执行####
1 2 3


####shift可以移动位置####
shift 2
echo $1
如果参数为1 2 3 4则echo $1输出3

4:数学运算

#! /bin/bash
set 1 2  3
echo $1 $2 $3
 
expr 1 + $1   #1+1
expr 2 \* $2  #2*2
expr 3 - $3   #3-3
expr 2 / $1   #2÷1
expr 2 % $1   #2取余1

RESULT=`1 + 1`  #将计算结果赋予RESULT

5:通配符

通配符说明
*匹配任意多个字符串,在搜索文件时使用
?匹配任意一个字符
[ list]匹配该字符组所限定的任何一个字符
[!list]匹配除了字符组所限定的任何一个字符
[c1-c2]匹配c1-c2中的任何一个字符

6:转义字符

转义字符说明
’ ’ 单引号由单引号括起来的所有字符或字符串都作为普通字 符出现。
" "双引号由双引号括起来的字符,除$、倒引号和反斜线(\)仍保留其特殊功能外,其余字符都作为普通字符。
``反引号如果想将计算结果为某个变量赋值 需要 ``反引号括起来
#注释符
\转义符,它能把特殊字符变成普通字符若想在字符串中使用反斜杠本身,必须采用两个\的形式
&后台操作符

7:控制语句

test语句:

test expression 或 [ expression ]
-a file	若文件file存在,则条件测试为真,返回结果为0
-b file	若文件file存在,且为块文件,则条件测试为真,返回结果为0
-c file	若文件file存在,且为字符文件,则条件测试为真,返回结果为0
-d file	若文件file存在,且为目录文件,则条件测试为真,返回结果为0
-e file	若文件file存在,则条件测试为真,返回结果为0
-f file	若文件file存在,且为常规文件,则条件测试为真,返回结果为0
-r file	若文件file存在并且可读,则条件测试为真,返回结果为0
-w file	若文件file存在并且可写,则条件测试为真,返回结果为0
-x file	若文件file存在并且可执行,则条件测试为真,返回结果为0
-p file	若文件file存在并且是FIFO文件,则条件测试为真,返回结果为0
-s file	若文件file存在并且不是空文件,则条件测试为真,返回结果为0

if语句:

#if else
if [ 条件表达式 ]
then 满足则执行该语句
else 不满足执行该语句
fi

#if elseif  else
if [ 条件表达式1 ]
then 满足表达式1
elif [ 条件表达式2 ]
then 满足表达式2
else [ 都不满足 ]
fi

select语句:

#! /bin/bash
select var in "a" "b" "c"
do
  echo "你的回答是$var"
  break
done

#执行
[root@centos7 home]# sh test.sh 
1) a
2) b
3) c
#? 3
你的回答是c

case语句:

#!/bin/bash
read NUM
case $NUM in
"1")
echo "周一" ;;

"2")
echo "周二" ;;

"3")
echo "周三" ;;

"4")
echo "周四" ;;

"5")
echo "周五" ;;

"6")
echo "周六" ;;

"7")
echo "周天" ;;


*)
echo "星期八" ;;

esac
case $1 in
[Dd]ate) echo the date is `date` ;; #如果输入Date 或者 date
dir|path) echo the path is `pwd`;; #如果输入dir 或者 path
*) echo bye
esac

for语句:

#带参数列表的for循环 找出当前文件下所有的.c文件并输出内存
for i in *.c
do
 cat $i
done
#不带参数列别的for循环 从1加到100
#! /bin/bash
SUM=0

for((i=1 ; i < 100 ; i++))
do
        SUM=$[$SUM + $i]
done

echo $SUM

while语句:

#! /bin/bash
SUM=0
i=0
while [ true ]
do
 SUM=$[$SUM + $i ]
 i=$[ $i + 1]
 if [ $i -eq 100 ] #当i=100跳出循环
 then break
 fi
done

echo $SUM

break语句:

break n n表示几层循环 默认1层

continue语句:

continue n   continue命令后面的整数n表示要提出n层循环,默认值为1。

exit语句:

exit [n] 其中n为设定的退出值,如果未给定n的值,则退出值为最后一个命令的执行状态

函数:

Function( )
    {
        command-list
    }

Function 调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值