欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Linux】——Shell编程基础

程序员文章站 2022-03-04 19:00:40
...

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中进行数值运算有三种方式

  1. $((运算式))
  2. $[运算式]
  3. 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则是用来获取向函数所传递的参数

相关标签: Linux linux