一、shell简述
shell是操作系统的最外层,shell可以合并编程语言以控制进程和文件,以及启动和控制其他程序。shell通过提示用户输入,向操作系统解释该输入,然后处理来自操作系统的任何输出结果来管理用户与操作系统之间的交互。简单来说,shell就是用户和操作系统之间的一个命令解释器。
二、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)等,不同的Shell的语法有所不同,所以不能交换使用。最常用的是Shell是Bash,也就是Bourne Again Shell,由于易用和免费,bash在工作中被广泛使用,也是大多数Linux默认的Shell。
三、shell脚本的编写与执行
shell脚本文件以.sh为扩展名
执行使用命令:/bin/bash 或 ./xxx.sh 或 sh
调试使用的执行命令 /bin/bash -x xxx.sh
#!/bin/bash 表明是在哪个环境下执行
echo "开始创建文件夹"
mkdir /temp/shell
echo "文件夹创建完成"
四、shell的基础语法
1、echo
echo "hello word" 直接打印
echo -e "hello \n word" 换行打印
echo -e "\033[32m hello word \033[0m" 自定义自体颜色打印
[32m代表颜色
# 注释符
/n 表示换行
echo xxxx xxxxxxx>> 文件 将xxxx和xxxxxxxx追加到文件
2、变量
分为局部变量和环境变量,局部变量只在创建它们的shell脚本中使用,环境变量则还可以在它们创建的任意子进程中使用。
1)自定义变量
变量名称=值 例DIR=/temp/shell
$变量名称 表示引用这个变量 $DIR
#!/bin/bash
DIR=/temp/shell
echo "$DIR"
2)shell专用变量
$0 表示当脚本的名称
$n (n表示1,2,3,4.......)表示当前脚本的第n个参数
$* 表示当前脚本的所有参数(不包括程序本身)
$# 表示当前脚本的参数的个数(不包括程序本身)
$? 命令或程序执行完成之后的状态,一般返回0表示成功
$$ 表示当前shell的pid
$UID 当前用户的id
$PWD 当前所在的目录
3、if条件语句
1)判断数字大小
if [ 表达式 ];then.......else.......fi
#!/bin/bash
num=6
if [ $num > 6 ];then
echo "the num 大于6"
else
echo "the num 小于等于6"
fi
2)判断目录是否存在
if [ -d 目录];then.......else......fi
if [ -d temp/test ];then
echo "目录存在"
else
echo "目录不存在"
fi
if [ ! -d 目录];then.......else......fi
if [ ! -d temp/test ];then
echo "目录不存在"
else
echo "目录存在"
fi
3)判断文件是否存在
if [ -f 文件名称];then.......else........fi
if [ -f temp/test ];then
echo "文件存在"
else
echo "文件不存在"
fi
if [ ! -f 文件名称 ];then..... else......fi
if [ ! -f temp/test ];then
echo "文件不存在"
else
echo " 文件存在"
fi
多条件判断 if [];then.....elif [];then......else......fi
4、循环语句
for 变量 in 变量集合(1 2 3 4)用空格分开 或者 `seq start end`
do 对i进行处理
done
for i in a b c
do
echo $i
done
for ((i=1;i<=100;i++))
do
echo $i
done
j=0
for ((i=1;i<=100;i++))
do
j=`expr $j + $i`
done
echo $j
循环操作文件
for i in `find/var/log/ -name "*.log"`
do
tar -czf $i.tgz
done
`` 反引号表示其中的内容是一条命令
5、case语法
case $变量名 in
值1)逻辑处理
;;
值2)逻辑处理
;;
值3)逻辑处理
;;
esac
case $1 in
1) echo 1
;;
2) echo 2
;;
3) echo 3
;;
esac