Shell 编程疾速入门
编写一个 Shell 脚本 hello.sh
#!/bin/bash
echo 'hello world!'
运行脚本 hello.sh
# 办法1
sh hello.sh
# 办法2
chmod +x hello.sh
./hello.sh
#终端打印出 hello world!
Shell 变量
根本语法
定义变量:变量名=变量值,等号两侧不能有空格,变量名个别习惯用大写。
删除变量:unset 变量名 。
申明动态变量:readonly 变量名,动态变量不能unset。
应用变量:$变量名$n :$0 代表命令自身、$1-$9 代表第1到9个参数,10以上参数用花括号,如 ${10}。
$* :命令行中所有参数,且把所有参数看成一个整体。
$@ :命令行中所有参数,且把每个参数辨别看待。
$# :所有参数个数。
实例:编写 Shell 脚本 positionPara.sh ,输入命令行输出的各个参数信息。
#!/bin/bash
# 输入各个参数
echo $0 $1 $2
echo $*
echo $@
echo 参数个数=$#
运行positionPara.sh
chmod +x positionPara.sh
./positionPara.sh 10 20
运行后果
./positionPara.sh 10 20
10 20
10 20
参数个数=2
预约义变量
根本语法
$$ :以后过程的 PID 过程号。
$! :后盾运行的最初一个过程的 PID 过程号。
$? :最初一次执行的命令的返回状态,0为执行正确,非0执行失败。
实例:编写 Shell 脚本 prePara.sh ,输入命令行输出的各个参数信息。
#!/bin/bash
echo 以后的过程号=$$
# &:当前台的形式运行程序
./hello.sh &
echo 最初一个过程的过程号=$!
echo 最初执行的命令后果=$?
运行后果
以后的过程号=41752
最初一个过程的过程号=41753
最初执行的命令后果=0 # hello world!
运算符
根本语法
$((运算式)) 或 $[运算式]
expr m + n 留神 expr 运算符间要有空格
expr m – n
expr *,/,% 别离代表乘,除,取余
实例:
# 第1种形式 $(())
echo $(((2+3)*4))
# 第2种形式 $[],举荐
echo $[(2+3)*4]
# 应用 expr
TEMP=`expr 2 + 3`
echo `expr $TEMP \* 4`
条件判断
根本语法:[ condition ] 留神condition前后要有空格。非空返回0,0为 true,否则为 false 。
实例:
#!/bin/bash
if [ 'test01' = 'test' ]
then
echo '等于'
fi
# 20是否大于10
if [ 20 -gt 10]
then
echo '大于'
fi
# 是否存在文件/root/shell/a.txt
if [ -e /root/shell/a.txt ]
then
echo '存在'
fi
if [ 'test02' = 'test02' ] && echo 'hello' || echo 'world'
then
echo '条件满足,执行前面的语句'
fi
运行后果
大于
hello
条件满足,执行前面的语句
if判断
根本语法
if [ 条件判断式 ];then
程序
fi
# 或者(举荐)
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi
实例:编写 Shell 程序:如果输出的参数大于60,输入“及格”,否则输入“不及格”
#!/bin/bash
if [ $1 -ge 60 ]
then
echo 及格
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
case分支
根本语法
case $变量名 in
"值1")
如果变量值等于值1,则执行此处程序1
;;
"值2")
如果变量值等于值2,则执行此处程序2
;;
...省略其它分支...
*)
如果变量值不等于以上列出的值,则执行此处程序
;;
esac
实例:当命令行参数为1时输入“周一”,2时输入“周二”,其余状况输入“其它”
case $1 in
"1")
echo 周一
;;
"2")
echo 周二
;;
*)
echo 其它
;;
esac
for 循环
根本语法
# 语法1
for 变量名 in 值1 值2 值3...
do
程序
done
# 语法2
for ((初始值;循环管制条件;变量变动))
do
程序
done
实例:
1.打印命令行输出的参数。
#!/bin/bash
# 应用$*
for i in "$*"
do
echo "the arg is $i"
done
echo "=================="
# 应用$@
for j in "$@"
do
echo "the arg is $j"
done
运行后果
the arg is 1 2 3
==================
the arg is 1
the arg is 2
the arg is 3
2.输入从1加到100的值。
#!/bin/bash
SUM=0
for ((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo $SUM
while 循环
根本语法
while [ 条件判断式 ]
do
程序
done
实例:输入从1加到100的值。
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo $SUM
读取控制台输出
根本语法:
read(选项)(参数)
选项
- -p:指定读取值时的提示符
- -t:指定读取值时期待的工夫(秒),如果没有在指定工夫内输出,就不再期待了。
参数
- 变量名:读取值的变量名
实例:读取控制台输出一个num值。
#!/bin/bash
read -p "请输出一个数num1=" NUM1
echo "你输出num1的值是:$NUM1"
read -t 10 -p "请在10秒内输出一个数num2=" NUM2
echo "你输出num2的值是:$NUM2"
运行后果
请输出一个数num1=10
你输出num1的值是:10
请在10秒内输出一个数num2=20
你输出num2的值是:20
函数
1.零碎函数
根本语法
basename,删掉门路最初一个 / 前的所有局部(包含/),罕用于获取文件名。
根本语法
basename [pathname] [suffx]
basename [string] [suffx]
如果指定 suffx,也会删掉pathname或string的后缀局部。dirname,删掉门路最初一个 / 后的所有局部(包含/),罕用于获取文件门路。
根本语法
dirname pathname
如果门路中不含 / ,则返回 ‘.’ (以后门路)。
实例:
# basename /usr/bin/sort
sort
# basename include/stdio.h
stdio.h
# basename include/stdio.h .h
stdio
# dirname /usr/bin/
/usr
# dirname dir1/str dir2/str
dir1
dir2
# dirname stdio.h
.
2.自定义函数
根本语法
[ function ] funname[()]
{
Action;
[return int;]
}
# 调用
funname 参数1 参数2...
实例:计算输出两个参数的和。
#!/bin/bash
function getSum(){
SUM=$[$n1+$n2]
echo "sum=$SUM"
}
read -p "请输出第一个参数n1:" n1
read -p "请输出第二个参数n2:" n2
# 调用 getSum 函数
getSum $n1 $n2
发表回复