linux学习之Shell脚本编程(图文)
2020-08-08 19:51
1436 查看
shell脚本
可以在shell界面执行的命令文剑(命令文件:含有各种命令的文本)
第一个shell脚本
新建一个shell文件夹(测试方便),在shell文件夹下,新建shell脚本文件shelltest.sh
mkdir shell cd shell/ touch shelltest.sh
修改脚本文件的执行权限:
chmod u+x shelltest.sh
vi shelltest.sh进入文件内容编辑界面,输入:
#!/bin/bash echo 'hello shell
#!是一个约定的标记,让系统用bash解释器来执行这个脚本
./shelltest.sh执行脚本,执行结果:
shell中的变量
定义变量: 变量名=值name_123='你好,shell'
注意点:
1、"="左右不能有空格
2、变量名只能由英文字母、数字、下划线组成,且不能以数字开头
3、不能使用bash里的关键字
name_123='你好,shell'echo $name_123
执行结果:
只读变量: 在变量前加
readonly
删除变量:
unset 变量名
变量类型:
系统变量
echo $PATH printf‘%s\n%s\n%s\n’$PATH $PWD $USER $UID $HOME $HOSTNAME
set:显示所有系统变量
自定义变量:
弱类型(通常为字符串、数值)
数组
([val1,...valn])
环境变量:跨SHELL访问
全局变量:当前SHELL访问,每个SHELL会话都是独立进程,有独立的PID,不同SHELL的会话之间不会互相交叉影响,函数中的变量默认也是全局变量
局部变量:当前函数中访问,函数中声明局部变量:
local A=5shell 传递参数:
预定义变量:
$?最后一次执行命令的返还状态。0表示正常,其他表示异常
$$当前进程的进程编号PID
$!后台运行的最后一个进程的PID
$0命令本身
$nint(n>0) 表示第几个参数
echo $0 #命令本身 echo $1 #打印第一个参数 echo $2 #打印第二个参数 echo '参数数量:' $#
执行脚本:
$*所有参数(整体)
$@所有参数(个体)
$#参数数量 shell字符串
单引号: 会按单引号中输出原本内容
双引号: 如果双引号中有命令,则会执行
字符串拼接:
str1="hello" str2="shell" str3="!" echo $str1 $str2 $str3
执行结果:
获取字符串长度
str="hello shell !" echo ${#str}
执行结果:
截取字符串
str="hello shell !" echo ${str:2:8} #第2个字符开始截取8个字符
执行结果:
字符串查找
str="hello shell !" echo `expr index "$str" s` #查找s在str中的位置
执行结果:
shell数组
在shell 中,用括号来表示数组,元素用空格隔开
array=(a b c d e) echo ${array[0]} echo ${array[@]}
在读取数组时,可以
echo ${array[下标]},也可以用
echo ${array[@]}全读
输出结果:
获得数组长度:
array=(a b c d e) length1=${#array[@]} length2=${#array[*]} echo $length1 $length2
执行结果:
shell注释
单行注释:
#
多行注释:
:<<!......!
shell控制台输入
read -t SECONDS -p "HINT" VAR
-t 超时(秒)
-p 提示
VAR 控制台输入值赋值的变量
shell运算符
算术运算符:
+ - * / %
算数表达式:
$((EXP)) S=$((2+3))
$[EXP] S=$[2*3]
expr EXP分布计算
注意:
\*表示乘法,其他相同,运算符前后必须加空格
S=`expr 2 \* 3`
关系运算符和条件表达式:
condition # 前后加空格 [ condition ] # -eq(等于) -en(不等于) -gt(大于) -lt(小于) -ge(等于等于) -le(小于等于) test condition # 同上 [[ condition ]] # 同上
罗辑运算符
!非
-o或
-a且
shell逻辑控制
分支结构if[ condition ] then 语句块 fi
if[ condition1 ] then 语句块 elif[ condition2 ] then 语句块 else 语句块 fi
case $VAR in V1) 语句块 ;; V2) 语句块 ;; *) 语句块 ;; esac循环结构
for VAR in val1...valn do 语句块 done
for((初始化;条件;变化)) <=> (i=1;i<=100;i++) do 语句块 done
while[ condition ] do 语句块 done
相关文章推荐
- Linux-Shell脚本编程-学习-4-Shell编程-操作数字-加减乘除计算
- Linux学习-高级shell脚本编程(二)初识sed和gawk
- 【Linux 系统编程】shell 脚本基础学习之函数(五)
- Linux学习(八):shell脚本编程
- 学习Linux 从入门到精通 含shell脚本以及编程 关于shell的进阶学习
- Linux学习笔记(共享内存 +⽂件锁 + 信号量 +Shell脚本编程 +云服务器⼊⻔)之信号量 +Shell脚本编程
- Linux学习-shell脚本编程基础之处理用户输入
- linux学习--shell的脚本编程理解
- Linux命令shell脚本编程学习笔记-18章初识sed和gawk
- Linux-Shell脚本编程-学习-7-总结前面开启后面的学习
- Linux-Shell脚本编程-学习-3-Shell编程-shell脚本基本格式
- Linux学习第九节课-shell脚本编程
- linux学习笔记:shell脚本编程相关(上)
- 大数据学习之路----linux系统的shell脚本编程(一)
- Linux命令行与Shell脚本编程[学习笔记1]
- Linux-Shell脚本编程-学习-2-Linux基本命令
- Liunx 命令行与shell脚本编程大全 第八章学习笔记(Linux系统的包管理基础)
- Linux学习-shell脚本编程基础(节选)
- Linux命令与shell脚本编程学习笔记-16创建函数
- Linux-Shell脚本编程-学习-8-函数