1.什么是shell编程
就是把我们前面学习过的linux命令(shell命令),利用shell编程的语法规则组织起来,形成一个脚本程序,自动管理我们的linux系统
脚本程序:不需要编译器编译(解释型的编程语言),代码写好以后直接就能运行
比如:设计网页html5语言就是脚本程序
shell编程也是一种脚本编程语言
2.第一个脚本程序
shell脚本: 要求后缀名是.sh
#可以注释掉单行
shell脚本运行:
方法一: ./脚本的名字
./first.sh
方法二: source 脚本的名字
source first.sh
分析shell脚本的语法结构:
解释器:翻译并逐句执行你的脚本
#!/bin/bash 每个shell脚本必须要写的,指明了shell脚本解释器的路径名
echo "good good study,day day up"
肤浅的认识:shell脚本很简单,就是把命令写进去就可以了
3.shell编程语法规则
(1)变量
语法规则:变量名=赋值 //变量没有类型
获取变量的值:$变量名
三种类型的变量:普通变量 命令行变量 环境变量
第一种:普通变量
第二种:命令行变量(类似于C语言的主函数传参)
$1 类似于argv[1]
$n 类似于argv[n]
$# 参数的个数 argc-1
$? 返回上一条命令执行的结果 执行成功返回0 执行失败返回非零
$* 所有的参数argv[1]一直到argv[n]
第三种:环境变量
export PATH=某个路径:$PATH
export LD_LIBRARY_PATH=某个路径:$LD_LIBRARY_PATH
(2)输入输出
输入: read
read m n 连续读取两个变量,输入的时候空格隔开
输出: echo
(3)特殊符号
第一种:双引号"",单引号' ',反引号` `
双引号 --》用来表示字符串,原样输出字符串
单引号 --》也能表示字符串,原样输出
反引号 --》调用执行shell命令
第二种:取值范围
[0-9] 从0--9中选择一个数字
[a-z] 从a-z中选择一个字母
[Azb94h] 从中括号中挑选一个字符出来
[^0-9] 取反操作,非数字
(4)基本运算
加 + 减 - 乘 * 除 /
`expr $m + $n` //加号左右两边必须有一个空格
`expr $m - $n`
`expr $m \* $n`
`expr $m / $n`
(5)循环,条件判断,case语句
第一种:循环
总共有三种循环写法:for while until
5.1 for循环
语法规则: for 变量 in 范围
do
要执行的代码;
done
范围的写法: `seq 0 5`
5.2 while循环
语法规则: while 条件 //条件成立就执行循环
do
要执行的代码;
done
条件的写法:用到test语句
写法一: test 条件
if test $m -gt $n
写法二: [ 条件 ] 写法二等价于写法一,写法二省略了test这个单词
if [ $m -gt $n ]
5.3 until循环
语法规则: until 条件 //条件不成立就执行循环
do
要执行的代码;
done
5.4 多个条件
while [ 条件1 && 条件2 ]
while [ 条件1 || 条件2 ]
5.5 退出循环
break
continue
第二种:条件判断
写法一:一种情况判断
if 条件
then
要执行的代码;
fi
写法二:二种情况判断
if 条件
then
要执行的代码;
else
要执行的代码;
fi
写法三:三种及以上情况判断
if 条件
then
要执行的代码;
elif 条件
then
要执行的代码;
else
要执行的代码;
fi
注意:
第一:只要有if的地方,必须有then, 结尾fi容易忘记
第二:字符串比较大小,> <需要转义
第三:条件的第二种写法,中括号左右两边都必须有一个空格
第三种:case
语法规则: case 变量值 in
1)
执行代码
;;
2)
执行代码
;;
esac
注意:case里面不能使用break
case对于变量值没有限制,可以是任何数据
(6)函数
6.1 函数的定义
语法规则: 函数名()
{
具体代码
}
注意要点:
第一:shell编程的函数都是没有返回值类型的
第二:圆括号不能有任何参数
第三:如果你写的函数需要传递实参,那么函数的代码中可以用$1 $2 $3 ....... $n分别表示第一个,第二个,第三个.......第n个参数
6.2 函数的调用
函数名 实参1 实参2 ...........实参n
实参1跟$1对应 实参n跟$n对应
6.3 函数的返回值
如何得到返回值: $?得到
返回值取值范围: 0---255之间
case.sh
#!/bin/bash
echo "pls 1. login 2. remove 3. add!"
read n
case $n in
1)
echo "login"
;;
2)
echo "remove"
;;
3)
echo "add"
;;
esac
for.sh
#!/bin/bash
for i in `seq 3 10`
do
echo "i is: $i"
done
for.sh
#!/bin/bash
sum=0
for i in `seq $1 $2`
do
sum=`expr $sum + $i`
done
echo "$1----$2 result is:$sum"
if.sh
#!/bin/bash
if test -e 1.txt
then
echo "1.txt is exist"
else
echo "1.txt is not exist"
fi
if.sh
#!/bin/bash
echo "pls input two strings"
read str1
read str2
if test $str1 \> $str2
then
echo "str1>str2"
elif test $str1 \< $str2
then
echo "str1<str2"
else
echo "str1==str2"
fi
until.sh
#!/bin/bash
i=0
until [ $i -gt 5 ]
do
echo "hello world i is:$i"
i=`expr $i + 1`
done
while.sh
#!/bin/bash
i=0
while [ $i -le 5 ]
do
echo "hello world"
i=`expr $i + 1`
done
打印test语句的返回值
#!/bin/bash
test -e 1.txt
echo $?
演示$?的含义
#!/bin/bash
ls -l haha.sh
ls -l 1.sh
echo $?
单引号和反引号
#!/bin/bash
echo 'hello world'
#echo `hello world`
echo `ls`
ls -l
定义普通变量
#!/bin/bash
m=666
n=12.5
buf="hello"
a=-12
echo $m
echo $n $buf $a
函数的定义和调用
#!/bin/bash
fun()
{
echo "hello world"
}
myadd()
{
echo "$1 + $2 is:`expr $1 + $2`"
}
myaddplus()
{
return `expr $1 + $2 + $3`
}
fun
myadd 12 13
myadd 16 15
myaddplus 12 13 45
函数的返回值
#!/bin/bash
myadd()
{
return `expr $1 + $2`
}
fun()
{
return -1 #函数返回值0--255之间
}
#fun1()
#{
#return "hello" 不能返回字符串
#}
fun2()
{
return 300 #函数返回值0--255之间
}
#ret=myadd 12 13 经典错误,自以为是
#echo $ret
myadd 12 13
echo $?
fun
echo "fun return is: $?"
fun2
echo "fun2 return is: $?"
函数的练习
#!/bin/bash
getmax()
{
maxnum=$1
if test $maxnum -lt $2
then
maxnum=$2
fi
if test $maxnum -lt $3
then
maxnum=$3
fi
echo "max is: $maxnum"
}
getmax 45 6 963
命令行传递参数
#!/bin/bash
mkdir /home/gec/$1
命令行参数
#!/bin/bash
echo $0
echo $1
echo $2
echo $*
echo $#
echo $?
输入和输出.sh
#!/bin/bash
echo "please input a number"
read a
echo $a
echo "please input a string"
read b
echo $b
echo "please input a double"
read c
echo $c
echo "please input two numbers"
read d e
echo $d $e
双引号.sh
#!/bin/sh
echo "ls -l result is: ls -l"
echo "ls -l result is: 'ls -l'"
echo "ls -l result is: `ls -l`"
演示基本运算
#!/bin/bash
m=99
n=77
#echo $m+$n #经典错误
#echo `expr $m + $n`
#echo `expr $m+$n` #错误,加号左右两边必须有空格
echo `expr $m - $n`
echo `expr $m \* $n`
echo `expr $m / $n`
条件的第二种写法
#!/bin/bash
echo "pls input two numbers"
read a
read b
#if test $a -gt $b
if [ $a -gt $b ]
then
echo "a>b"
fi
2156

被折叠的 条评论
为什么被折叠?



