复习shell编程


前言

学习linux过程中,对shell简单的做过一定的连接与使用,但是没有对其进行深入的研究,最近将之前学习的基础知识进行巩固一下,以后自己想做一些关于大数据方向的工作,因此对于shell进行再次的学习,也将之前的知识进行梳理。

shell介绍

shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核,shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。

查看自己的linux服务器的shell

## 查看shell相关的工具
sudo cat /etc/shells
##结果是有多个文件加,一般会有/bin/sh、/bin/bash/、usr/bin/sh/、usr/bin/bash
##查看系统默认的shell工具
echo $SHELL

脚本格式

脚本以#!/bin/bash开头

编写第一个脚本

创建一个文件helloshell.sh

#!/bin/bash
echo "hello xing"

执行该文件

##方式一
bash helloshell.sh
##方式二
sh helloshell.sh
##方式三 相对路径执行,如果不能执行可能是因为权限问题,使用chmod修改文件权限
./helloshell.sh

编写shell文件并修改权限

测试二

使用sh创建一个文本文件,并在文本文件中写入文字

touch test.sh

##井号不一定是注释,bash一般将下面的语句放在文件的第一行
#!/bin/bash
##一下创建文本信息,首先自定义文件位置
cd /home/itxing/
##创建文件
touch biaobai.txt
##写入字符
echo "lalala,I LOVE YOU" >> biaobai.txt

shell的变量

1.常用的系统变量

$HOME、$PWD、$SHELL、$USER

使用set命令查看shell中的所有变量

2.自定义变量

1) 自定义变量格式

变量 = 值 注意等号的两边不能有空格

2)撤销变量

unset 变量

3) 声明静态变量

readonly 变量=变量值(不能被unset)

4)变量定义规则

a.变量名称可以是字母、数字和下划线,不能以数字开头,环境变量名最好使用大写

b.等号两边不能有空格

c.在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

d.变量的值如果有空格,需要双引号或单引号括起来

将命令的返回值赋值给变量A

A=`ls -la`

或者

A=$(ls -la)

查看变量的值

3.linux设置环境变量

1)export 变量名=值

2)source 配置文件

3)echo $变量名

配置文件一般是/etc/profile文件,修改环境变量后,使得环境变量生效,使用

source /etc/profile

自定义的环境信息

修改配置

位置参数变量

1.执行脚本时,需要接收命令行传递的参数

例如:./test.sh 100 200

2.基本的语法

语法和功能

$n:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,传递十以上的参数,需要使用花括号包含例如${12}

$* 表示该变量代表命令行中所有参数,将所有参数看做整体

$@ 表示命令行中的所有参数,但是该命令将参数区分对待

$# 表示命令行中参数的个数

3.应用实例

接受参数的shell脚本

预定义变量

1.说明

提前定义好的变量,在shell中可以使用

2.基本语法

$$:当前进程的进程号PID
$!后台运行的最后一个进程的进程号
$?最后一次执行命令的返回状态,如果变量的值为0,上一个命令正确执行;如果变量值非0,证明上一个命令执行不正确

3.应用实例

执行脚本

结果:

结果显示

运算符

1.基本介绍

将变量进行常见的运算操作,例如+-*/等

2.基本语法

1)“$((运算式))”或者“$[运算式]”

2)expr m+n

3)expr m-n

4)expr \*,/,% 乘法、除法、取余

3.实例

计算(2+3)*4的值

$((运算式))

shell文件中计算

$[运算式]

简单运行

expr

中间变量表达式

计算两个传入的参数的和

接受参数并计算

条件判断

基本语法

[ condition ] 注意:condition前后需要有空格,非空返回true,可用$?验证(>0为true,>1为false)

常用的判断条件

1)两个整数比较

符号 符号说明 符号 符号说明
= 字符串比较 -lt 小于
-le 小于等于 -eq 等于
-gt 大于 -ge 大于等于
-ne 不等于

2)按照文件权限进行判断

-r 有读的权限[ -r 文件 ] -w 有写的权限

-x 有执行的权限

3) 按照文件类型进行判断

-f 文件存在并且是一个常规的文件 -e 文件存在

-d 文件存在并是一个目录

条件判断的结构

if语句

if [ 条件判断式 ]

then 程序

fi

=================

if [ 条件判断式 ]

​ then 程序

​ elif [ 条件判断式 ]

​ then 程序

fi

注:[ 条件判断式 ],中间必须要有空格字符

case语句

case $变量值 in

“值1”)

程序1

;;

“值2”)

程序2

;;

esac

应用实例

1.判断字符串是否相等(=)

#! /bin/bash
if ["ok" = "ok"]
then
 echo "equal"
fi

2.判断整数的大于

#! /bin/bash
if [23 -gt 22]
then
 echo "大于"
fi

3.判断文件是否存在

#! /bin/bash
if [ -e /root/shell/a.txt ]
then
    echo "存在"
fi

4.case例子

#! /bin/bash
##$1表示从命令行接受一个参数
case $1 in 
"1")
echo "周一"
;;
"2")
echo "周二"
;;
"3")
echo "周三"
;;
*)
echo "other"
;;
esac

循环

基本语法

for循环

for 变量 in 值1 值2 值3…

do

​ 程序

done

=========================

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

do

程序

done

while循环

while [ 条件判断 ]

do

程序

done

应用实例

1.输出命令行输入的参数

$*:表示将命令行输入的数字一行输出

$@:表示将命令行输入的数字多行输出

#! /bin/bash
for i in "$*"
do
    echo "您输入的数字为 $i"
done
echo "==============="
for j in "$@"
do
    echo "您输入的数字为 $j"
done

输出结果:

打印输入的字符

2.计算1-100的和

#! /bin/bash
SUM=0
for ((i=1;i<=100;i++))
do
  SUM+=$[$SUM+$i]
done
echo "sum=$SUM"

文章作者: it星
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 it星 !
 上一篇
阻塞队列 阻塞队列
it星
1.阻塞队列 队列是一个数据结构,阻塞队列就是线程从一端添加数据,从一端拿取数据。当阻塞队列时空时,从队列中获取元素的操作将会被阻塞;当阻塞队列是满时,往队列里添加元素的操作将会被阻塞。 为什么需要阻塞队列? 线程之间的通信一般使用的是
2020-10-01
下一篇 
数据库中间件ShardingSphere 数据库中间件ShardingSphere
数据库中间件ShardingSphere 去ShardingSphere官网了解 一、基本的概念 Apache ShardingSphere是一个开源分布式数据库中间件解决方案,子产品有三种Sharding-JDBC、Sharding-Pr
2020-09-05
  目录