前言
学习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

测试二
使用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.应用实例

预定义变量
1.说明
提前定义好的变量,在shell中可以使用
2.基本语法
$$:当前进程的进程号PID
$!后台运行的最后一个进程的进程号
$?最后一次执行命令的返回状态,如果变量的值为0,上一个命令正确执行;如果变量值非0,证明上一个命令执行不正确
3.应用实例

结果:

运算符
1.基本介绍
将变量进行常见的运算操作,例如+-*/等
2.基本语法
1)“$((运算式))”或者“$[运算式]”
2)expr m+n
3)expr m-n
4)expr \*,/,% 乘法、除法、取余
3.实例
计算(2+3)*4的值
$((运算式))

$[运算式]

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"
