shell 脚本基础
弱类型语言
bash 变量类型
本地变量 环境变量 局部变量 位置参数变量 特殊变量
运行 无执行权限 bash hello.sh 有执行权限
检查语法 bash -n user.sh 跟踪每一行的执行结果bash -x user.sh
变量用完之后,记得删 unset name1 name2
一般我们在shell里定义的变量,只能存在当前shell,不同的终端登录,不同的shell进程(父子shell进程),这些都是独立的shell进程。访问不到其他shell中的变量
export NAME //设置环境变量 ,环境变量可以多个shell都可以访问到,只能从上往下传,不能从下往上传。
env 列出当前全部的环境变量
(umask 066;touch f1) //内部产生了一个子shell 只对()内的命令有效
与或 计算 短路与 短路或 在Linux shell 中 0 代表成功,1-255代表失败 0为真 1为假
命令1 && 命令1的结果为真 运行这里 || 命令1的结果为假 则运行这里
位置变量
$1, $2, ... 对应第1、第2等参数,shift [n]换位置
$0 命令本身的路径
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
shell的一些特殊符号,特殊用法
echo {1..10} //代表的是 1 2 3 4 5 6 7 8 9 10
echo {1..10..2} //代表的是 1 3 5 7 9 步长为2
echo {a..z}
echo {a,b,c} //输出了 a,b,c
'' 单引号 意义 是什么就是什么 很直
"" 双引号 只能识别变量 命令不认识
`` 反引号 当做命令执行 什么都认识 一个命令会调用另外一个命令的执行结果的时候 与$() 一样的效果
0 代表成功,1-255代表失败 $? 变量保存最近的命令退出状态
注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命 令后面的数字
设置变量:name=value
name="ni sadsal jdsial"
值中没有空格的话,可以不用加引号,如果很长有空格的话,就要加上引号,否则报错
引用变量:echo $name
echo ${name}123 在输出的结果后面加上123,但是写在一起会出错,所以要{ }起来
bash中的算术运算
+, -, *, /, %取模(取余), **(乘方),
(1) let var=算术表达式 (2) var=$[算术表达式] (3) var=$((算术表达式))
生成 0 - 49 之间随机数 echo $[$RANDOM%50]
测试命令: [ EXPRESSION ]
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
[ $USE -ge 80 -o $USE_I -ge 80 ] -o 或者 -a 并且
字符串 测试
= 是否等于
> ascii码是否大于ascii码
< 是否小于
!= 是否不等于
=~ 左侧字符串是否能够被右侧的PATTERN所匹配 注意: 此表达式一般用于[[ ]]中; 扩展的正则表达式
-z "STRING“ 字符串是否为空,空为真,不空为假
-n "STRING“ 字符串是否不空,不空为真,空为假
文件测试
-e FILE: 文件存在性测试,存在为真,否则为假
-b FILE:是否存在且为块设备文件
-c FILE:是否存在且为字符设备文件
-d FILE:是否存在且为目录文件
-f FILE:是否存在且为普通文件
-r FILE:是否存在且可读
-w FILE: 是否存在且可写
-x FILE: 是否存在且可执行
if 条件语句
单分支
双分支
if 也可以用命令退出状态做判断
if ping -c1 -W2 station1 &> /dev/null; then
echo 'Station1 is UP'
elif grep "station1" ~/maintenance.txt &> /dev/null; then
echo 'Station1 is undergoing maintenance'
else
echo 'Station1 is unexpectedly DOWN!'
exit 1
fi
case判断
case 变量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac
case支持glob风格的通配符:
- *: 任意长度任意字符
- ?: 任意单个字符
- []:指定范围内的任意单个字符
- a|b: a或b
read
[root@localhost ~]# read NAME AGE 自动忽略空格
hxf 20
[root@localhost ~]# echo $NAME $AGE
hxf 20
shell 脚本基础的更多相关文章
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- shell脚本-基础
shell脚本-基础 编程基础 程序是指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序提供了编程能力,解释执行. 计算运行二进 ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Shell脚本基础学习
Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...
- 什么是Shell?Shell脚本基础知识详细介绍
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
- shell脚本基础知识
虽然现在能在Linux系统下生存,但是自觉效率太低,和高手有很大的差距. 这就是关于Linux的知识太过匮乏,有很多事情知道该怎么做,但是就是没法在Linux下实现,为了提升工作效率,必须要接触Lin ...
- shell脚本 基础应用
变量分为普通变量可只读变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ...
- 模块一:shell 脚本基础
一.shell脚本介绍 (一)脚本案例及介绍: #!/bin/bash LOG_DIR=/var/log ROOT_UID=0 if ["$UID -ne "$ROOT_UID&q ...
- shell脚本基础知识以及变量
一.基础知识 1.shell脚本的格式注意事项 第一行(一般必须写明):指定脚本使用的shell(若不写明也不影响脚本的执行,系统会自动以sh解析脚本)."#!/bin/bash" ...
随机推荐
- 如何在windows和linux搭建django环境
注:本文以python3为例,python2.x是一样的不再赘述 提前准备: python/python3已经安装好,如果没有请参考以下资料进行安装 linux安装python3 win安装pytho ...
- 【C语言】创建一个函数,利用该函数将两个字符串连接起来
代码: #include<stdio.h> ], ]) { int i, j; ; c[i] != '\0'; i++); ; d[j] != '\0'; j++) { c[i++] = ...
- HttpClient与TestNG结合
1.HTTPclient插件的安装 在maven项目的pom.xml中引用HTTPclient包,如下 <dependencies> <dependency> <grou ...
- P&R 6
Floorplan: 要做好floorplan需要掌握哪些知识跟技能? 通常,遇到floorplan问题,大致的debug步骤跟方法有哪些? 如何衡量floorplan的QA? Floorplan基本 ...
- properties文件读写工具类PropertiesUtil.java
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- pyqt中定时器的使用
1.定义一个定时器函数 # 定时器 from PyQt5.QtCore import QTimer def timer_start(): timer = QTimer() # fun1是监听的函数,如 ...
- Vue-路由跳转的几种方式和路由重定向
一.标签路由 router-link 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始. 1.不传参 <router-link :to=& ...
- Django报错 The serializer field might be named incorrectly and not match any Got AttributeError when attempting to get a value for field `author_for` on serializer `KnownledgeBaseListSerializer`
1.问题描述,在设置,model部分字段的serialier时,出现如下报错 字段如下: # 知识库List class KnownledgeBaseListSerializer(serializer ...
- Java的Path、Paths和Files
前言 因为这几天被java.nio的这几个接口和工具类卡到了,就顺便地查了一波文档以及使用方法,这篇其实更像是API的复制粘贴,只不过我在注释里多写了一些output和注意事项,看不惯API的可以选择 ...
- 一份比较详细的DOS命令说明
一份比较详细的DOS命令说明 1 echo 和 @ 回显命令 @ #关闭单行回显 echo off #从下一行开始关闭回显 @echo ...