Linux(8)Shell编程

30 篇文章 0 订阅

1 概念

  • Shell是一种用c语言编写的程序,它是用户使用linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
  • Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

2 Shell脚本(Shell Script)

  1. 是一种为shell编写的脚本程序。
  2. shell通常都是指shell脚本。
  3. shell和shell script是两个不同的概念。
  4. ”shell编程“都是指shell脚本编程,不是指开发shell自身。

3 shell环境

  1. Shell编程跟java、PHP编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以。
  2. Linux的shell种类众多,常见的有:
    Bourne Shell(/usr/bin/sh或/bin/sh)
    Bourne Again Shell(/bin/bash)
    C Shell(/usr/bin/csh)
    K Shell(/usr/bin/ksh)
    Shell for Root(/sbin/sh)

4 Shell的编写流程

  1. 编写Shell脚本
  2. 赋予可执行权限
  3. 执行,调试

5 运行Shell的两种方法

  1. 作为可执行程序
  2. chmod +x ./test.sh (u、g、o都是可执行权限)
    在这里插入图片描述

shell高亮显示

[hr@yr ~]$ vi hello.sh

#!/bin/bash           
# #!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,使用哪一种shell
echo "hello world!"
~
  1. 执行的方法:
  • sh ./【shell】
  • ./【shell】
  • sh 【shell】等同于. 【shell】
[hr@yr ~]$ ./hello.sh
hello world!
[hr@yr ~]$ sh ./hello.sh
hello world!
[hr@yr ~]$ sh hello.sh
hello world!

[hr@yr ~]$ chmod -x hello.sh
[hr@yr ~]$ ll hello.sh
-rw-r--r-- 1 hr HR 32 Jan 17 11:24 hello.sh
[hr@yr ~]$ sh hello.sh
hello world!
[hr@yr ~]$ sh ./hello.sh
hello world!
[hr@yr ~]$ ./hello.sh
-bash: ./hello.sh: Permission denied                    # 没有权限

6 Shell常用关键字

  • echo 打印文字到屏幕
  • exec 执行另一个Shell脚本(在一个脚本里执行另一个脚本,调用的关系)
  • read 读标准输入
  • expr 对整数型变量进行算术运算
  • test 用于测试变量是否相等、是否为空、文件类型等
  • exit 退出

7 Shell的变量

注意:1)等号前后不要有空格:NUM=10
2)一般变量名用大写:M=1
3)使用$调用变量:$NUM

echo $NUM

1.用户自定义变量

  • unset 删除变量
  • readonly 标记为只读变量
  • export 指定全局变量
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2.预定义变量
  • $0:脚本文件名
  • $1-9:第1-9个命令行参数名

在这里插入图片描述

  • $#:命令行参数个数
    在这里插入图片描述
    在这里插入图片描述

  • $@:所有命令行参数

  • $*:所有命令行参数
    在这里插入图片描述
    输出所有的参数

  • $?:前一个命令的退出状态,可用于获取函数返回值

  • $$:执行的进程ID
    在这里插入图片描述
    显示进程号

3.环境变量
环境变量默认就存在,常见的有HOME、PATH、TERM、UID、PWD等

8 bash中整数运算符号

  • + - * / 加减乘除
  • % 余数
  • $ 与
  • | 或
  • ! 非

9 Shell运算

在这里插入图片描述
在这里插入图片描述

m=`expr $m + 1` 加号左右要打空格

let m=$m+1 也可以

10 整数比较

  • -eq 等于,如:if [ “$a” -eq “$b” ]
  • -ne 不等于,如:if [ “$a” -ne “$b” ]
  • -gt 大于,如:if [ “$a” -gt “$b” ]
  • -ge 大于等于,如:if [ “$a” -ge “$b” ]
  • -lt 小于,如:if [ “$a” -lt “$b” ]
  • -le 小于等于,如:if [ “$a” -le “$b” ]
  • < 小于(需要双括号),如:(("$a" < “$b”))
  • <= 小于等于(需要双括号),如:(("$a" <= “$b”))
  • > 大于(需要双括号),如:(("$a" > “$b”))
  • >= 大于等于(需要双括号),如:(("$a" >= “$b”))

11 字符串比较

  • = 等于,如:if [ “$a” = “$b” ]
  • == 等于,如:if [ “$a” == “$b” ],与=等价

注意:
$a=1 变量a被赋予的值是数字1
$a==1 比较变量a的值是否为数字1

12 字符串比较

= 等于,如if[ “$a” = “$b” ]
== 等于,如if[ “$a” = “$b” ]

  • 比较a和b的大小:
[root@yr d01]# vi true.sh

#!bin/bash

a=10
b=20

if [ $a == $b ]
        then
        echo "a=b"
else
        echo "a!=b"
fi

~
"true.sh" 11L, 78C written
[root@yr d01]# . true.sh
a!=b

另一种写法:

[root@yr d01]# vi true2.sh

#!/bin/bash

a=10
b=20

if [ $a == $b ]
        then
        echo "a=b"
fi
if [ $a != $b ]
        then
        echo "a!=b"
fi
~
"true2.sh" 13L, 120C written
[root@yr d01]# . true2.sh
a!=b
  • read -p p是prompt的缩写,从键盘输入的值获取变量值
  • -t 三秒后
[root@yr d01]# vi read.sh

#!/bin/bash

read -t 3 -p "print:" x
if [ $x == 5 ]
        then
        echo "x is 5"
else
        echo "x is not 5"

fi
~

~
"read.sh" 11L, 102C written
[root@yr d01]# . read.sh
print:3
x is not 5

13 循环

13.1 for循环

循环到取值范围结束才结束。是把变量一个一个取出来。

  • 语法:
    for i in {变量}
    do
    。。。
    done
[root@yr d01]# vi for.sh

#!/bin/bash

for i in {1..10}
do
        echo $i
done

~
"for.sh" [New] 7L, 48C written
[root@yr d01]# . for.sh
1
2
3
4
5
6
7
8
9
10
13.2 while循环

与for循环的区别:有判断

i=1
while (( $i<10 ))
 do                # do前面有空格,如果符合while就执行do后面,不符合就执行done
    echo $i
    i=$(($i+1))
done
13.3 嵌套
i=1
while(($i<10))
do
        echo $i
        i=$(($i+1))
if [ "$i" -eq 10 ]
        then
        echo $i
#else

#       echo "false"
fi
done

i=1
while(($i<10))
do
        echo $i
        i=$(($i+1))
if(($i==10))
        then
        echo $i
#else
#       echo "false"
fi
done

(())可以一个空格都没有,用== 、>=显示
[]必须再if 后加空格,所有地方都得有空格:if空格[空格变量空格-eq空格变量空格],并且用-eq等显示

14 数组

  • 数组是有序的元素序列
  • name】若将有限个类型相同的变量的集合命名,那么这个名称为数组名
  • 组成数组的各个变量成为数组的分量,也成为数组的元素
[root@yr d01]# vi days.sh

#!/bin/bash

x=1
echo $x
days=([0]=Sun [1]=Mon [2]=Tue [3]=Wed [4]=Thu [5]=Fri [6]=Sat)
echo ${days[$x]}
echo ${days[4]}
echo ${days[5]}

echo "********************"

for i in {0..6}
do
echo ${days[$i]}
done
~
"days.sh" 15L, 208C written
[root@yr d01]# . days.sh
1
Mon
Thu
Fri
********************
Sun
Mon
Tue
Wed
Thu
Fri
Sat

说明:
如果不分行写,写在一行的话,

x=3  echo $x

定义一个x,x的值就按新定义的返回。

[root@yr d01]# export x=1
[root@yr d01]# . days.sh
1
Mon

但如果

x=3 ; echo $x

就相当于分行了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值