Shell 是一个用 C 语言编写的程序。
shell script 脚本
1.shell版本
Bourne Shell(/usr/bin/sh或/bin/sh)
#!告诉系统用的shell程序路径
#!/bin/sh 或者 #!/bin/bash
2.第一个helloworld
#!/bin/bash
echo "Hello World !"
3.执行shell脚本
(1)
chmod +x test.sh 赋权
./test.sh
(2)
sh test.sh 不需要在第一行指定解释器信息,写了也没用。
4.变量,注意不要有空格
(1)命名/赋值
file_name=$1
file_name="xxx"
英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线
不能使用标点符号
不能使用bash里的关键字
(2)使用
echo $file_name
echo ${file_name}
建议都加上花括号
echo "$file_nameabc" 直接输出$file_nameabc作为字符串
5.字符串
(1)写法
file_name='xxx'
file_name="xxx"
单双引号的区别是,双引号中可以有变量,单引号不行
(2)拼接字符串
greeting_1="hello, ${your_name} !"
(3)获取字符串长度
string="abcd"
echo ${#string} #输出 4
(4)截取字符串
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo
6.数组
(1)括号定义,空格分隔
array_name=(value0 value1 value2 value3)
(2)读取数组
${数组名[下标]}
echo ${array_name[@]} 读取所有元素
(3)获取数组元素个数
# 取得数组元素的个数
length=${#array_name[@]} 或者
length=${#array_name[*]}
7.注释
#
8.反引号 `
反引号中的命令可以给变量赋值
file_name=`echo "hello.sh"`
echo ${file_name} 输出:hello.sh
9.参数传递
echo $0 文件名
$1 第1个参数
$2 第2个参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
10.运算符
val=`expr 2 + 2`
echo "两数之和为 : $val"
输出结果: 两数之和为 : 4
(1)算数运算符 + - \* / %
比较数字
==
!=
(2)关系运算符
-eq
-ne
-gt
-lt
-ge
-le
if [ $a -eq $b ]
then
echo "a 等于 b"
fi
(3)布尔运算符
! [ ! false ] 返回 true
-o 或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true
-a 与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false
(4)逻辑运算符
&& 逻辑的 AND
|| 逻辑的 OR
(5)字符串运算符
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否为0,不为0返回 true。[ -n "$a" ] 返回 true。
(6)文件测试运算符
-d 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false
-f 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ] 返回 true。
-e 检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ] 返回 true
-s 检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ] 返回 true。
11.流程控制 if..else for
(1)if..else
注意:if [ ] 之间必须有空格,否则报错
if [ $a -eq $b ];then
else
fi
或者
if [ $a -eq $b ]
then
elif [ $a -eq $c ]; then
else
fi
(2)for
for val in 1 2 3 4 5
do
echo "The value is: $val"
done
或者写成
for val in 1 2 3 4 5;do
echo "The value is: $val"
done
数组
nums=(1 2 3 4 5)
for val in ${nums[@]}
do
echo "The value is: $val"
done
(3)while
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
(4)无限循环
while true
do
command
done
(5)case
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
(6)break continue
break 结束循环
continue 结束本次循环
12.函数
(1)函数定义调用
demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
(2)函数参数
书写形式不变,获取参数也是$
demoFun(){
echo "$1"
echo "$2"
}
demoFun 1 2
13.文件引用
#使用 . 号来引用test1.sh 文件,注意点号后面有空格
. ./test1.sh