Shell 脚本编程
Shell 脚本编程
Shell 编程
Shell 简介
Shell 是 Linux 系统中的命令解释器,可以将人理解的指令转换成机器指令,达到操控硬件的目的。
第一个 Shell 脚本
#! /bin/sh
echo "hello, world!"
#这是一个注释
# #!后面是当前默认的命令行解析器
# echo 打印 hello, world!并以标准形式输出
父 shell 和子 shell
在 shell 中再启动一个 shell 进程,则该进程为子 shell,另一个 Shell 为父Shell
运行脚本
直接在当前shell 中运行:
- source 目录/脚本名.sh
- . 目录/脚本名.sh 创建子 shell 运行
- ./脚本名.sh * 注意 / 与脚本名之间不能有空格
变量
变量分为系统变量和用户变量
系统变量:系统预定义的变量,一般以大写字母命名
# env 查看系统变量
# set 查看所有变量
用户变量:用户自定义的变量
系统变量在父/子 shell 中都可以访问,用户变量只在其定义中的 shell 中可以访问。
用户变量定义方法:
my_var=4
readonly read_var=hello #只读变量
# 访问变量
$my_var
注意:
- 等号两边不能有空格
- 默认定义为局部变量,使用以下命令上升为全局变量
export my_var
- 子 shell 可以改变全局变量的值,但只在子 shell 中生效,在父 shell 访问时值并未改变。
- 变量默认类型为字符串类型,不能进行数学运算
- 撤销变量并释放内存,使用以下命令
unset my_var
#不能 unset 只读变量
特殊变量
-
$0:获取脚本的名字
-
$1:获取第一个参数
-
$n:获取第 n 个参数
-
$#:获取脚本参数的个数
-
$*:输出所有参数
-
$@:输出所有参数
-
$?:获取脚本的运行状态,返回 0 脚本成功运行,返回非 0 值脚本运行不成功
运算
sum=$[4 + 6]#10
sum=$((4 + 6))#10
sum=$[$1 + $2]#获取第一个和第二个参数的值并计算结果
sum=$(($1 + $2))#获取第一个和第二个参数的值并计算结果
条件判断
字符串比较
a=hello
test $a = hello | echo $?
# 判断a是否等于hello,如果等于返回0,不等于返回1。
[ $a != hello ] | echo $?
# 判断a是否不等于hello,如果等于返回0,不等于返回1。
a=15
test $a = hello | echo $?
[ $a != hello ] | echo $?
#这里仍然属于字符串判断,shell 中的数学比较不能用 = > <等等,因为这些符号有它原来的意义,比如 > 重定向的作用
数学比较
a = 15
[ $a -gt 20 ] | echo $?
#判断 a 是否大于 20,大于返回 0,不大于返回 1。
数学比较符号
- eq equal
- ne not equal
- gt greater than
- ge greater equal
- lt less than
- le less equal
文件目录比较
[ -e filename ] | echo $?
#判断文件是否存在
[ -f filename ] | echo $?
#判断是不是一个文件
[ -d directoryname ] | echo $?
#判断是不是一个目录
权限判断
[ -r filename ] | echo $?
#判断是否具有写入权限
- -r
- -w
- -x 多重判断
a=20
[ $a -lt 30 ] && echo "0" || echo "1"
#判断 a 的值是否小于 30,是返回 0,否则返回 1。
流程控制
if语句
a=20
if [ $a -gt 18]
then
echo " > 18"
else
echo " <= 18"
fi
# 判断 a 的值是否大于18
if [ $a -gt 18 -a $a -lt 35]
# if [ $a -gt 18 ] && [ $a -lt 35 ] 也可以写成这样
then
echo "OK"
else
echo " NO"
fi
# 判断 a 的值是否大于18且小于35
if [ $a -lt 18 ]
then
echo "< 18"
elif [ $a -lt 35 ]
then
echo "< 35"
else
echo ">= 35"
fi
case语句
case $1 in
#判断第一个参数的值
1)
#如果等于 1,输出 one
echo "one"
;;#标志结尾
2)
echo "two"
;;
3)
echo "three"
;;
*)
#如果是其他情况
echo "else"
;;
esac
#反转的case 标志 case语句的结尾
for循环
for ((i=0; i < $1; i++))
do
echo $i
done
# do标示for循环体的开始
# done标示for循环语句的结束
# (()) 双括号内可以使用数学运算符
上面的for循环形式比较繁琐,还有另一种比较简洁的for循环。
for i in 1 2 3 4 5
# for i in {1..5}
do
echo $i
done
while循环
i=1
while [ $i -lt $1]
do
echo $i
done
#i要在循环外初始化
读取用户输入
read -t 10 -p "请输入姓名:" name
echo $name
#read 读取用户输入
# -t 指定等待输入的时间
# -p 输入提示信息
# 变量名 指定输入内容存储的变量
函数
系统函数
系统函数是系统预定义的函数,使用时可以直接调用。如:
basename: 获取文件名
dirname: 获取目录名
在脚本中调用系统函数并获取结果
command1=$(dirname)
# $()获取 dirname 函数执行的结果并赋值给 command1
自定义函数
function sum(){
sum=$[ $1 + $2 ]
echo $sum
return $?
}
# function可以省略,但一般不省略。
# 函数不需要形式参数,与脚本一致,使用位置参数
# return 语句可加可不加,如果不加,系统会自动添加。
# 调用函数
add=$(sum 1 2)
参考链接
https://www.bilibili.com/video/BV1WY4y1H7d3?p=1&vd_source=f09fa21118f68e116e074e2f6b4e14e4
(全文完) 以上内容只代表个人观点,如果对你有所帮助,点击这里给我一个小小的star
如果有任何问题欢迎随时联系我进行批评指正:2076577077@qq.com
我是gled fish, 点击这里来到我的博客网站:
尊重作者原创, 转载请注明作者和出处,请勿用于任何商业用途。