shell
1050字约4分钟
2025-05-28
变量的规则
脚本开头必须要有 #!/bin/bash
#!/bin/bash
echo "hello,world"
执行脚本前需要对脚本赋值权限
chmod u+x ce.sh
./ce.sh
变量
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头
- 等号相变不能由空格
- 变量名称一般大写
- 静态变量不能撤销
#!/bin/bash
# 变量
A=100
# 输出
echo "A = $A"
# 撤销A变量
unset A
echo "A = $A"
# 静态变量,静态变量不能撤销
readonly B=2
echo "B = $B"
# 输出结果
A = 100
# 因为此时的变量A被撤销掉了,所以没有内容
A =
B = 2
反引号
反引号中的命令会被执行,以下代码中是将data
命令的执行结果赋值给变量A
`date` 和 $(date)是一个效果
#!/bin/bash
A=`date`
B=$(date)
echo "data = $A"
# 输出结果
data = 2025年 05月 19日 星期一 18:32:15 CST
data = 2025年 05月 19日 星期一 18:32:15 CST
注释
# 单行注释
:<<!
多行
注释
!
#!/bin/bash
:<<!
A=`date`
B=$(date)
echo "data = $A"
echo "data = $B"
!
环境变量
Linux系统环境配置文件 /etc/profile
shell中可以引用环境变量
#!/bin/bash
echo "nginx = $NGINX_HOME"
# 输出结果
nginx = /usr/local/nginx
传入参数
$n 输入一个数
$* 将多个输入的数看成一个整体
$@ 输入多个数,每个数为独立的一个整体(输入多个数时用)
$# 显示输入参数的个数
#!/bin/bash
echo "0=$0, 1=$1, 2=$2, 10=${10}"
# 参数个数
echo "$#"
[root@hadoop01 ~]# ./ce.sh 1 2 3 4 5 6 7 8 9 10 11
0=./ce.sh, 1=1, 2=2, 10=10
11
[root@hadoop01 ~]# ./ce.sh 1 2 3 4 5 6 10 11
# 对应位的数才能传进去,这里的10是第7位
0=./ce.sh, 1=1, 2=2, 10=
8
运算符
$((运算式子))
、 $[运算式子]
或者 expr 运算式子
的功能都差不多
#!/bin/bash
NUM=$((2 * 3))
NUM1=$[2 * 3]
echo "$NUM2"
运行结果
6
#!/bin/bash
NUM2=`expr 3 + 4`
echo "$NUM"
运行结果
7
#!/bin/bash
NUM1=$[2 * 3]
# 变量相乘,符号要用 \*
NUM2=`expr $NUM1 \* 4`
echo "$NUM2"
运行结果
24
判断语句
单分支/比较符
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
#!/bin/bash
# 中括号和中间的语句要用空格隔开
if [ "2"="2" ]
then
echo "equal"
fi
-r 判断是否有读的权限
-w 判断是否有写的权限
-x 判断是否有执行的权限
-f 检查是否为普通文件
-e 检查文件或目录是否存在
-d 检查文件或目录是否存在
#!/bin/bash
# 判断文件是否存在
if [ -f /root/ce.sh ]
then
echo "equal"
fi
多分支
#!/bin/bash
# 两种写法
# then 写在 if 后则需要加 ;
if [ $1 -ge 60 ]; then
echo "He_ge"
elif [ $1 -lt 60 ]
then
echo "Bu_he_ge"
fi
[root@hadoop01 ~]# ./ce.sh 70
He_ge
控制语句
#!/bin/bash
case $1 in
# 当参数为 1 时,输出
"1")
echo "one"
;;
"2")
echo "two"
;;
# 输入的参数不存在时,输出
*)
echo "other..."
esac
[root@hadoop01 ~]# ./ce.sh 1
one
[root@hadoop01 ~]# ./ce.sh 2
two
[root@hadoop01 ~]# ./ce.sh 3
other...
for循环
for 变量 值1 值2 ...
do
代码
done
#!/bin/bash
for i in "$*"
do
echo "num = $i"
done
[root@hadoop01 ~]# ./ce.sh 1 2 3
num = 1 2 3
#!/bin/bash
# 输入多少个值,就循环多少次
for i in "$@"
do
echo "num = $i"
done
[root@hadoop01 ~]# ./ce.sh 1
num = 1
[root@hadoop01 ~]# ./ce.sh 1 2 3
num = 1
num = 2
num = 3
#!/bin/bash
NUM=0
for (( i=1; i<=100; i++ ))
do
NUM=$[$NUM+$i]
done
echo "$NUM"
[root@hadoop01 ~]# ./ce.sh
5050
while循环
while [ 循环条件 ]
do
程序
done
#!/bin/bash
NUM=$1
while [ $NUM -ne 0 ]
do
NUM=$[ $NUM - 1 ]
echo "$NUM"
done
[root@hadoop01 ~]# ./ce.sh 10
9
8
7
6
5
4
3
2
1
0
输入
read
-p
输入
-t
设置输入的时间,超过该时间则停止输入
#!/bin/bash
read -p "输入=" NUM1
echo "num1 = $NUM1"
read -t 5 -p "shuru = " NUM2
echo "num2 = $NUM2"
[root@hadoop01 ~]# ./ce.sh
输入=12
num1 = 12
shuru = 23
num2 = 23
[root@hadoop01 ~]# ./ce.sh
输入=9
num1 = 9
# 没有输入,超过5秒结束输入
shuru = num2 =
函数
返回文件名
[root@hadoop01 ~]# basename /home/ce.sh
ce.sh
[root@hadoop01 ~]# basename /home/ce.sh .sh
ce
返回路径
[root@hadoop01 ~]# dirname /home/ceshi/ce.sh
/home/ceshi
自定义函数
#!/bin/bash
function sum() {
SUM=$[$n1+$n2]
echo "num = $SUM"
}
read -p "输入n1=" n1
read -p "输入n2=" n2
sum $n1 $n2
[root@hadoop01 ~]# ./ce.sh
输入n1=1
输入n2=2
num = 3