Shell脚本入门
centos默认的shell解析器是bash
脚本以
#!/bin/bash
开头(指定解析器)
变量
常用的系统变量
- $HOME、$PWD、$SHELL、$USER
基本语法
- 定义变量:变量=值
- 撤销变量:unset 变量
- 声明静态变量:readonly变量,不能unset
变量定义规则
- 可以由字母、数字、下划线构成,但不能以数字开头
- 环境变量名大写
- 等号两侧不能有空格
- 在bash中,变量默认类型是字符串型,无法直接进行数值运算
- 变量的值如果有空格,需要使用双引号或单引号括起来
特殊变量
$n
- $0 代表脚本名称
- $1-$9 代表第一到第九个参数
$#
- 获取所有输入参数个数,常用于循环
$*
- 代表命令行中所有参数,把所有参数看成一个整体,"$*"
$@
- 也代表命令行中所有的参数,不过把每个参数区分对待,"$@"
$?
- 最后一次执行命令的返回状态,如果这个变量的值为0代表正确执行
运算符
$((运算式))
或$[运算式]
条件判断
- [ 条件 ]
常用判断条件
两个整数之间的比较
== #字符串比较 -lt #小于 -le #小于等于 -eq #等于 -ne #不等于 -gt #大于 -ge #大于等于
[ 23 -ge 22 ] echo $?
按照文件权限进行判断
-r #可读 -w #可写 -x #可执行
[ -w helloworld.sh ] echo $?
按照文件类型进行判断
-f #文件存在且是一个常规文件 -e #文件存在 -d #文件存在并且是一个目录
[ -e /home/atguigu/cls.txt ] echo $?
流程控制
if判断
#!/bin/bash
if [ $1 -eq "1" ]
then
echo "banzhang zhen shuai"
elif [ $1 -eq "2" ]
then
echo "cls zhen mei"
fi
case语句
!/bin/bash
case $1 in
"1")
echo "banzhang"
;;
"2")
echo "cls"
;;
*)
echo "renyao"
;;
esac
for循环
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
s=$[$s+$i]
done
for i in $*
do
echo "ban zhang love $i "
done
while循环
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
read读取控制台输入
read (选项)(变量)
- 选项:-p:指定读取时的提示符;-t:指定读取时的等待时间(秒)
- 变量:指定读取值时的变量名
#!/bin/bash read -t 7 -p "Enter your name in 7 seconds " NAME echo $NAME
函数
系统函数
basename:文件名
basename /home/lixuan/banzhang.txt banzhang.txt
dirname:文件绝对路径,不包括文件名
dirname /home/lixuan/banzhang.txt /home/lixuan
自定义函数
#!/bin/bash
function sum()
{
s=0
s=$[ $1 + $2 ]
echo "$s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;
Shell工具
- cut
- awk
- sort