SHELL编程入门
1.语法规则
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写;
等号两侧不能有空格,衍生规则就是变量声明时必须初始化;
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算;
变量的值如果有空格,需要使用双引号或单引号括起来;
变量名区分大小写;
2.特殊变量
$n
n是数字,$0代表当前脚本名称。从$1开始代表对应的脚本参数。从${10}开始数字需要使用{}括起来。
$#
返回参数的个数。
$*
$@
都能够返回全部参数,但是只有在循环中且放在引号中能够体现出它们的区别。
#! /bin/bash
echo "$0 $1 $2"
[root@localhost ~]# ./myshell.sh 参数1 参数2 参数3
./myshell.sh 参数1 参数2
[root@localhost ~]#
#! /bin/bash
echo "$0 $1 $2"
echo $#
echo $*
echo $@
[root@localhost ~]# ./myshell.sh 参数1 参数2 参数3
./myshell.sh 参数1 参数2
3
参数1 参数2 参数3
参数1 参数2 参数3
[root@localhost ~]#
$?
返回上一条命令的执行结果
3.运算符
Shell的运算表达式的语法如下: ( ( 表达式 ) ) 或 ((表达式))或 ((表达式))或[表达式]
[root@localhost ~]#
[root@localhost ~]# echo $((30+20))
50
[root@localhost ~]# echo $[(1+2)/4]
0
[root@localhost ~]#
4.条件判断
语法
写法1:test 条件表达式
写法2:[ 条件表达式 ]
条件表达式前后有空格
空字符串视为false,非空字符串视为true
#! /bin/bash
test 5 -gt 3
# 获取上一条语句的执行结果
echo '5>3?' $?
test 5 -lt 3
echo '5<3?' $?
[ 5 -gt 3 ]
echo '[5>3]?' $?
[ 5 -lt 3 ]
echo '[5<3]' $?
file1=my_condition.sh
[ -e $file1 ]
echo '是否存在文件'$file1 $?
[ -w $file1 ]
echo '当前用户是否可以修改文件'$file1
echo $?
[root@localhost ~]# ./my_condition.sh
5>3? 0
5<3? 1
[5>3]? 0
[5<3] 1
是否存在文件my_condition.sh 0
当前用户是否可以修改文件my_condition.sh
0
[root@localhost ~]#
5.流程控制
三元运算
[root@localhost ~]# [ 5 -gt 3 ] && echo '5>3' || echo '5<3'
5>3
[root@localhost ~]#
if判断
1 #! /bin/bash
2 if [ 5 -gt 3 ]
3 then
4 echo '5>3'
5 elif [ 5 -eq 3 ]
6 then
7 echo '5=3'
8 else
9 echo '5<3'
10 fi
[root@localhost ~]# ./my_if.sh
5>3
[root@localhost ~]#
case判断
#! /bin/bash
money=99.9
case $money in
10)
echo 10
;;
20)
echo 20
;;
*)
echo other
;;
esac
[root@localhost ~]# ./my_case.sh
other
[root@localhost ~]#
for循环
for in 循环
#! /bin/bash
# 简单for循环
for (( i=1;i<=5;i++ ))
do
echo '简单for循环'$i
done
# 从外部传入循环长度
len=$1
for(( i=1;i<=len;i++ ))
do
echo '从外部传入循环长度'$i
done
# for in 循环
for i in "$*"
do
echo 'for in *'$i
done
for i in "$@"
do
echo 'for in @'$i
done
[root@localhost ~]# ./my_for.sh 4 5 6 2
简单for循环1
简单for循环2
简单for循环3
简单for循环4
简单for循环5
从外部传入循环长度1
从外部传入循环长度2
从外部传入循环长度3
从外部传入循环长度4
for in *4 5 6 2
for in @4
for in @5
for in @6
for in @2
[root@localhost ~]#
while循环
#! /bin/bash
sum=0
i=1
while [ $i -le 10 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum
[root@localhost ~]# ./my_while.sh
55
[root@localhost ~]#
6.函数
==Shell 编程中要求函数的返回值只能是整数。并且只能通过 $? 方式获得。可以显示加:return 返回,如果不加,将以最后一条命令运行结果(这个运算结果可以表示true或者false,以及执行成功或者执行失败),作为返回值。return 后跟数值 n(0-255)。 ==
#! /bin/bash
function test(){
echo $2
return $1
}
test 11 'hello'
echo '返回值是'$?
[root@localhost ~]# ./my_func.sh 11 'hello'
hello
返回值是11
[root@localhost ~]#
7.获取脚本外部数据
通过$1 $2 …
通过read读取用户输入
#! /bin/bash
read -t 10 -p '请输入:' name
echo $name
[root@localhost ~]# ./my_read.sh
请输入:hello
hello
[root@localhost ~]#