1.hello world
#! /bin/bash
echo "hello world!"
以上为shell的第一个脚本
我们可以在目录中直接vim hello.sh(创建hello.sh,并编辑)
输入i后开始编辑
#! /bin/bash表示指定该脚本文件应该由哪个解释器来执行。
echo表示输出
编辑完成后,按ESC,输入wq,保存退出
执行脚本可以使用:
sh hello.sh
/bin/bash hello.sh
2.sleep
#! /bin/bash
echo "1"
sleep 5
echo "2"
以上为sleep的简单脚本,表示输出1,等待5秒后输出2
sleep单位默认为秒(s),如果需要其他单位,可在数值后面加上单位,例如sleep 2m(等待2分钟),sleep 1h(等待一小时),sleep 1d(等待一天)
3.variable(变量名)
#! /bin/bash
d = 'date + %H:%M:%S'
echo "begin at $d"
echo "wait 5s"
sleep 5
d1 = 'date + %H:%M:%S'
echo "end at $d"
其中d就相当于变量,这里是输出了当前时间,等待5秒后,再次输出时间d1
其中d和d1后面的不是单引号’‘,而是esc键下面的`
4.数学运算(+、-、*、%、=、/)
#! /bin/bash a=1
b=1
jia=$[$a+$b]
jian=$[$a-$b]
cheng=$[$a*$b]
yu=$[$a%$b]
chu=$[$a/$b]
echo "jia:$jia"
echo "jian:$jian"
echo "cheng:$cheng"
echo "yu:$yu"
echo "chu:$chu"
以上为加减乘除余等基本用法,需要注意书写格式
5.键值变量read
#! /bin/bash
read -p "Please input a number:" a
read -p "Please input another number:" b
sum=$[$a+$b]
echo "sun=$sum"
以上为一个键值的基本用法,这表示输入两个数字为a和b,求他们的和
其中read用于读取您从键盘输入的值,包括字符串等
read与read -p的区别就是后面""的提示语,read不显示提示信息
6.系统变量
$0:shell本身文件名
$?:最后运行命令的返回值
$!:shell最后运行的后台process的PID
$$:shell本身的pid
$#:shell的参数个数
$@:所有参数列表,以"$1 $2 ... $n"的形式输出所有参数,可超9个
$*:所有参数列表,以"$1" "$2" ... "$n"的形式输出所有参数
#! /bin/bash
echo "$0"
echo "$1"
echo "$2"
echo "$?"
echo "$!"
echo "$$"
echo "$*"
echo "$@"
echo "$#"
当我们运行时,传入两个参数sh option.sh 1 2(其中option.sh为文件名,$1 = 1,$2 = 2)
以上内容输出结果为:
option.sh
1
2
0
3525
1 2
1 2
2
7.函数定义
形参:不是实际存在的变量,又称虚拟变量
实参:在调用有参函数时,函数名后面括号内的参数为”实际参数“
#! /bin/bash
function sum(){
read -p "Please inout a number:" a
read -p "Please input another number:" b
sum=$[$a+$b]
echo "sum=$sum"
}
sum $a $b
以上为shell定义函数sum的简单例子
定义函数sum,输入a,b的值,求他们的和,并输出
这个例子也可以用系统变量来进行书写:
#! /bin/bash
function sum()
{
sum=$[$1+$2]
echo "sum=$sum"
}
sum $1 $2
执行时传入$1,$2的值,例如sh function1.sh 1 2
输出结果:sum=3
8.判断语句if
#! /bin/bash
function case()
{
read -p "Please inout a number:" a
read -p "Please input another number:" b
if ((a==b)); then
he=$[$a+$b]
echo "he:$he"
elif ((a>b)); then
jian=$[$a-$b]
echo "a>b:$jian"
else
jian1=$[$b-$a]
echo "a<b:$jian1"
fi
}
case $a $b
以上代码为if判断的一个语句
定义函数case,输入a,b的值做判断
如果a的值等于b的值,输出a+b
如果a的值大于b的值,输出a-b
如果a的值小于b的值,输出b-a
then表示当条件为真时,执行后面语句
第一个判断用if,第二个判断用elif,最后一个用else,最终用fi结束,条件为两个(),后面接分号;然后接上then
9.case判断
#! /bin/bash
read -p "Please input a number:" a
b=$[$a%2]
case $b in
1)
echo "weijishu"
;;
0)
echo "weioushu"
;;
*)
echo "feishu"
;;
esac
以上是用case写的判断一个数的奇偶性
输入a的值,取a与2的余数赋值给b,b=1时为奇数,b=*(除0,1以外任何数)时为非数,注意使用格式
10.while循环
-eq:等于
-ne:不等于
-le:小于等于
-ge:大于等于
-lt:小于
-gt:大于
#! /bin/bash
a=10
while [ $a -gt 1 ]; do
echo $a
a=$[$a-1]
done
以上为一个while递减的脚本,a等于10,当a大于1时,输出a,同时a=a-1,以此往复循环,直到a不大于1时停止
注:while [] 循环中[]内的条件语句开头和结尾记得空格
11.for循环
#! /bin/bash
for i in `seq 1 5`
; do
echo $i
done
以上为for循环递增的一个简单例子
seq 1 5
表示i起始为1,终止为5
整个程序表示i起始为1,终止为5,以此输出i的全部值
注:seq两边的点为esc键下面的`
12.break中断循环
! /bin/bash
for i in `seq 1 5`
;
do
if(($i == 3));
then
break
fi
echo $i
done
以上是一个嵌套循环语句,表示i的取值范围为1-5,从1开始,并输出i的值,当i等于3时,循环停止,结果为1,2
13.continue跳过本次循环
#! /bin/bash
for i in `seq 1 7`
do
if [ $i == 5 ]; then
continue
fi
echo $i
done
以上是一个continue的简单用法,这里用来跳过5
i取值为1-7,依次输出,当i等于5时,跳过本次循环,不执行输出,直接开始下一次循环
结果为1,2,3,4,6,7
14.exit退出进程
#! /bin/bash
for i in `seq 1 5`
do
if [ $i == 3 ]; then
exit
fi
echo $i
done
以上为一个简单的exit例子,当i的值为3时,退出进程,结果为1,2