#!/bin/bash
chmod +x filename.sh 后缀需要为.sh,同时需要将文件改为可执行文件
第一种 ./filename.sh
第二种 bash dilename.sh
第三种 export PATH=/home/linux/shell:$PATH 这/hone/linux/shell这个目录添加到环境变量之后,可以在任何目录下执行shell所写的程序
./filename.sh
(1)首个字符必须为字母(a~z, A~Z),或者下划线 _
(2)中间不能有空格,可以有下划线 _
(3)不能使用其他标点符号
变量的赋值例子:VAR="hello world !" 注意等号两边都没有空格
变量的调用例子:echo "VAR: = $VAR "
通过变量赋值给变量赋值例子:VAR=$VAR
变量的调用例子:echo "var=$VARAB"并不会打印”hello world !“,会打印var=;需要加变量分隔符也就是大括号{}.
使用unset可以删除变量的赋值:unset VAR
位置参数可以设置为$N得到,N是一个数字,N=0,$0表示传递给程序的名字,$1表示程序的第一个参数,以此类推
也就是shell本身规定的变量
$@:包含命令参数的个数
$?:包含当前一个命令的退出状态,正常退出返回0,反之为非0值
$*:包含所有命令行参数“$1,$2...."
$$:包括正在执行进程的ID号
HOME:文件中列出的用户主目录
IFS:内部字段分隔符,默认为空格,tab及换行符
echo:显示指定环境变量
export:设置新的环境变量
env:显示所有环境变量
set:显示所有本地定义的Shell变量
unset:清除环境变量
(1)read:从键盘获取变量的值
read 变量
read 变量1 变量2
read 的变量可以为一个或多个,但是键盘输入的时候格式要严格一致,即变量中有几个空格在输入的时候同样要加几个空格
(2)算数运算命令 expr $var1 运算符 $var2
var1=4
var2=8
add=`expr $var1 + $var2`
sub=`expr $var1 - $var2`
mul=`expr $var1 \* $var2`
div=`expr $var1 / $var2`
mod=`expr $var1 % $var2`
注意 : 乘法是\*
注意 运算符两边有空格,
注意 有``符号
(3)test命令
test可以测试的三种对象:字符串 整数 文件属性
1)字符串测试
s1 = s2 :测试两个字符串内容是否完全一样
s1 != s2 :测试两个字符串的内容是否有差异
-z s1 :测试字符串的长度是否为0
-n s1 :测试两个字符串的长度是否不为0
例子:
read var1
read var2
if [ "var1" = "var2" ]
then
echo "1"
else
echo "0"
fi
满足条件返回1,不满足条件返回0
2)整数测试
a -eq b :测试 a和b是否相等
a -ne b :测试a和b 是否不相等
a -gt b :测试a是否大于b
a -ge b : 测试a是否大于等于b
a -lt b :测试a是否小于b
a -le b :测试a是否小于等于b
例子
read var1
read var2
if test $var2 -eq $var2
then echo ”1“
else
echo "0"
fi
比较var1和var2是否相等,相等返回1,不相等等返回0
3) 文件测试
-d name 测试name 是否为一个目录
-f name 测试文件是否为普通文件
-L name 测试文件是否为一个符号链接
-r name 测试文件是否存在且可读
-w name 测试文化是否存在且可写
-x name 测试文件是否存在且可执行
-s name 测试文件是否存在且不为空
f1 -nt f2 测试文件f1是否比f2更新
f1 -ot f2 测试文件f1是否比文件f2更旧
例子
read name
if [ -d $name ]
then
echo "this is derictory"
fi
如果我们没有设置export PATH=/home/linux/Shell:$PATH;那么name我们需要输入绝对路径
(4)结构性语句
1)条件测试语句
if 表达式
then 执行的命令
else
执行的命令
fi
2)多路分支语句
case 字符串变量 in
模式1)
执行的命令;;
模式2)
执行的命令;;
模式n)
执行的命令;;
esac
例子:
read name
case $name in
file1)
echo "this is file1";;
esac
当我们输入file1的时候会打印 this is file1
3)循环语句-for
for 变量名 in 单词表
do
命令表
done
例子:
for I in $@
do
if [ $I != $0 ]
then echo "$I"
fi
done
执行 ./test.sh 0,1,2
打印结果 0
1
2
相当于把单词表一次赋给变量名
4)循环语句-while
while 表达式
do
命令表
done
例子
if test $# -eq 1
then
i=1
while rest $i -lt 5
do >$i$1
i=`expr $i + 1`
done
else
echo "$#"
fi
执行 ./test.sh 。txt
会生成1.txt,2.txt,3.txt,4.txt
(3)循环控制语句 continue 和 break
使用方法和C语言一样
方式一
function _name()
{
命令表
}
方式二
function function_name()
{
命令表
}
注意:shell函数只在当前shell中起作用,如果在shell中执行了其他shell那么当前shell中的函数不生效的
下面是一个函数的使用例子
例子
#!/bin/bash
read var1
read var2
function add()
{
ADD=`expr $1 + $2`
return $ADD
}
var=$? $?的作用是返回上一条语句的执行结果
echo $var
执行 ./test.sh
1
2
执行结果为 3
例子
test_1.sh
#!/bin/bash
echo "this is shell_1"
./test_2.sh
#test_1.sh
test_2.sh
#!/bin/bash
echo "this is shell_2"
#test_2.sh
当我们执行./test_1.sh
打印结果为:
this shell_1
this is shell _2
注意:我们可以对条件语句加双括号(()),那么双括号中的条件语句就可以使用C语言格式;