【Linux】——Shell编程基础
Linux下的Shell编程
使用Shell编写脚本可以提供许多方便的自动化操作,而Shell编程和高级语言也有着许多相似之处,因此学起来并不难
但是Shell所包含的命令众多而且复杂,因此这里仅仅记录通用的编程结构语句
变量
Shell使用$
来操作变量
系统变量
系统变量是由操作系统所规定的环境变量,所有进程均可访问或者修改,类似于
$HOME,$PWD,$SHELL,$USER等
自定义变量
自定义变量由用户自己定义,通常此变量仅仅能够在当前进程中使用,通过某些命令也可以使自定义变量成为系统变量
变量的名称可以是字母数字下划线,但是不能以数字开头,且变量默认均为字符串
变量不需要声明,直接以赋值的形式定义,后续使用$变量名
的形式来取变量的值
a = "hello world"
echo $a
a = test
echo $a
使用声明readonly
可以定义只读变量
readonly a = hello
a = world
echo a
使用声明export
可以将变量提升为全局变量,供其他进程使用
export b = "hello world"
使用生命unset
销毁已声明的变量,但无法销毁readonly
变量
a = hello
b = world
unset a
echo a + b
特殊变量
$n
变量,用来取传入的参数$0
代表该脚本名称,$1-$9
代表运行脚本时所传入的第1-9个参数,对于10个以上的参数可以使用${10}
的形式,但是通常不会使用这么多参数
echo $0 $1 + $2
./test.sh hello world
$#
变量获得传入参数的个数,可以用于循环
[email protected]
和$*
获得所有的传入的参数[email protected]
将参数区分,$*
将参数视为一个整体
大概意思就是[email protected]
可以看作参数列表,$*
则将参数和为一个字符串,以空格分隔
$?
获取上一条指令的返回值,成功为0,否则为非0
运算符
前面说过Shell的变量默认都为字符串,所以我们就不能直接进行数值运算
在Shell中进行数值运算有三种方式
- $((运算式))
- $[运算式]
- expr 运算式
expr 运算式要求运算符之间有空格
echo $((3+2))
echo $[3+2]
echo `expr 2 + 3` # " ` "运算符表示首先执行他所包含的语句
条件语句
这个不是if结构,而是简单的条件判断语句
[ 条件表达式 ] # 表达式前后与方括号之间必须有空格
常用的条件
两个整数的比较-lt
less than 小于-le
less equal 小于等于-eq
equal 等于-gt
greater than 大于-ge
greater equal 大于等于-ne
not equal 不等于
对文件权限的判断-r
read 可读-w
write 可写-x
execute 可执行
对文件类型的判断-f
file 存在并且是一个常规文件-e
existence 文件存在-d
directory 是目录文件
流程控制
这一部分就是高级语言中都有的流程控制语句
if
if [ 条件表达式 ];then
程序体
fi
if [ 条件表达式 ]
then
程序
fi
if
之后有空格,[]
和条件语句一样,两端都有空格
case
case $变量名 in
"值1")
程序体
;;
"值2")
程序体
;;
"值3")
程序体
;;
*)
程序体
;;
esac
;;
的作用和break
一样,*)
则和default
一样
for
for((初始值; 控制条件; 变量变化))# 注意是两个括号
do
程序体
done
for 变量 in 值1,值2,值3... # foreach循环
do
程序体
done
while
while [ 条件表达式 ]
do
程序体
done
read
read的作用是从标准输入读取数据
read(选项)(参数)
选项:
-
-p
输入提示符 -
-t
读取时的等待时长
参数
- 变量:指定用于存取读取值的变量
read -t 6 -p "please input a number: " number
echo $number
自定义函数
function 函数名() # function 可以不写 函数名之后的()也可以不写
{
函数体;
return; # return可以不写
}
函数名 # 同上
{
函数体;
}
通常使用
return $?
来返回上一条指令的执行结果
向函数传参和命令行传参相同,因此在函数体内的$n
则是用来获取向函数所传递的参数
上一篇: MySQL介绍系统信息函数