shell编程01-基本语法
1. Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell
Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的shell命令编程>
2. 基本格式(通常以.sh为后缀名)
vi hello.sh
#! /bin/bash 表示用哪一种shell解析器来解析执行这个脚本程序
echo “hello world”
给脚本添加x权限,才能执行:chmod +x hello.sh
执行:sh hello.sh 或者 ./hello.sh
3. linux shell中的变量分为“系统变量”和“用户自定义变量”
通过set命令查看系统变量
1/自定义变量
变量=值(等号两侧不能有空格,变量名大小写都可以,值上的双引号和单引号还是有区别的)
例:【[email protected]~】# love1=dog
【[email protected]~】# echo $love1
dog
【[email protected]~】# love2=cat
【[email protected]~】# echo $love2
cat
【[email protected]~】# love1=”dog$love2”
【[email protected]~】# echo $love1
dogcat
【[email protected]~】# love1=’dog$love2’
【[email protected]~】# echo $love1
dog$love2
【[email protected]~】# STR=”hello world”
【[email protected]~】# echo“$STRs is great”
is great
解决:【[email protected]~】# echo“${STR}s is great”
hello world is great
2/撤销变量A:unset A
readonly B=2 声明静态的变量B=2,不能unset
3/export A :可把变量提升为当前shell进程中的全局环境变量,可供其他子shell程序使用
例: vi a.sh vi b.sh
#! /bin/bash #! /bin/bash
a=aaa echo “in b.sh”$a
echo “in a.sh......”$a
sh b.sh
【[email protected]~】# sh a.sh
in a.sh........aaa
in b.sh........
解决:有3种方法
(1) export a=aaa
(2) source ./b.sh
(3) . ./b.sh
【[email protected]~】# sh a.sh
in a.sh........aaa
in b.sh........aaa
总结:
1、a.sh中直接调用b.sh,会让b.sh在a所在的bash进程的“子进程”空间中执行
2、而子进程空间只能访问父进程中用export定义的变量
3、一个shell进程无法将自己定义的变量提升到父进程空间中去
4、“.”号执行脚本时,会让脚本在调用者所在的shell进程空间中执行
4. 反引号赋值
A=`ls -la` : 反引号,运行里面的命令,并把结果返回给变量A
A=$(ls -la) : 等价于反引号
5. 特殊变量
$? 表示上一个命令退出的状态码
$$ 表示当前进程编号
$0 表示当前脚本名称
$n 表示n位置的输入参数(n代表数字,n>=1)
$# 表示参数的个数,常用于循环
$*和[email protected]都表示参数列表
注:$*与[email protected]区别
当它们被双引号" "包含时——
"$*" 会将所有的参数作为一个整体,以"$1 $2… $n"的形式组成一个整串;
"[email protected]" 会将各个参数分开,以"$1" "$2"… "$n"的形式组成一个参数列表
6. 算数运算
1/expr (expr运算符间要有空格)
例:计算(2 + 3)*4
Echo `expr \`expr 2 + 3\`\*4`
2/用(())
((1+2))
(((2+3)*4))
3/用$[]
a=$[1+2]
echo $a