Shell 编程

更改shell脚本权限

chmod u+x shell.sh

标准头部写法

#! /bin/bash
#! /bin/dash

变量使用

a=10
print $a

读取命令行参数

$#	# 传递给脚本的参数个数
$@ # 传递给脚本所有的参数
$0 # 当前脚本的名字
$1 # 传递给脚本的第一个参数(后面依次类推)

PS: ./test.sh COMP | head 此处读入的外界参数只有COMP,管道后面的并不会被当作参数

if的4种模式

  • 1
    if(($# != 2)) 2>/dev/null	  # 2>/dev/null意为输出错误不再显示到屏幕上,而是到null里
    then
    echo "$#"
    else # else后不用加then
    echo "Hello"
    fi
  • 2
    if [ $# -ne 2 ]		          # [ ]功能等同于test,使用-eq这些,而不是==
    then # [ ]中每个字符之间都要有空格
    echo "$#"
    fi
  • 3 dash不支持
    if [[ $# < 5 && $# > 2 ]]         # [[ ]]非常强大,可以使用逻辑表达式,也可以使用=~正则表达式
    then # dash 不支持
    echo "$#"
    fi
  • 4 判断文件是否存在
    if test -e $file	         # test测试后会返回一个值真或假,可测试数字、字符文件
    then
    echo "Exist" # -e,-r为检测文件是否存在
    fi

test详解

=, !=                 # 字符串匹配 (perl里字符串比较使用eq)
-gt,-eq,-ne,-lt # 数字大小判断(perl 里使用==与!=)
-e,-r # 判断文件存在,判断文件存在且可读
-a # and 例:if test $a -gt 10 -a -lt 15
-o

3种for循环

  • 1
    for((i=1;i<=10;i++))  # 注意此处是双括号
    do
    echo "Hi"
    done
  • 2
    for i in $(seq 1 10)
    do
    echo $i
    done
  • 3 dash写法
while [ $index -gt 0 ]
do
filename="hello$index.txt"
echo "hello $name" > $filename
# $i = $(expr $i - 1)
index=$((index-1))
# echo +++$index
done

依次读取目录下的文件

for file in *.jpg             # 读取当前目录下所有的.jpg文件
do
#操作变量的时候要加$,类似Vue的语法
#此处转换.jpg为.png,注意此处的echo,它有打开此文件的作用,若无可能无法将值赋给变量png
png=$(echo "$file" | sed 's/jpg/png/g')
done for file in * # 读取当前目录所有文件
do
print $file
done

echo的用法

echo的一个作用是读取文件名(并不打开文件)并通过管道传递

echo -n                            # 不换行输出
echo "hello world" >> a.txt # 追加至a.txt中
echo "hello world" > a.txt # 写入a.txt中

赋值命令行结果给变量

test=$()
test=``

加减运算

num=$(($1 + 1))    		       # 使用双括号进行运算赋值,$()这种无法进行计算会报错
num=$(expr $1 + 1) # 请注意,每个字符之间一定要有空格

Shell 编程 基础用法的更多相关文章

  1. 【转】Shell编程基础篇-下

    [转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...

  2. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  3. shell编程基础(转载)

    Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...

  4. Linux学习之二十一-shell编程基础

    Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...

  5. 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

    http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

  6. 7-1 shell编程基础之二

    shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...

  7. 6-2 shell编程基础

    shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...

  8. shell编程基础练习

    shell作为一个人机交互的接口,在Linux中发挥着很大的作用,而shell编程则是减轻系统工程师工作的利器,这里总结一下shell编程的主要内容(趁着程序运行的空档). 本文的基本结构是shell ...

  9. Linux(五)shell编程基础

    一.Linux shell简介 1.shell概述 Shell 是用户与内核进行交互操作的一种接口,目前最流行的 Shell 称为 bash Shell          Shell 是一门编程语言& ...

随机推荐

  1. Qt中的Q_PROPERTY宏浅析

    1. Q_PROPERTY Qt提供了一个绝妙的属性系统,Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObj ...

  2. kubernetes 使用 PV 和 PVC 管理数据存储

    文章链接 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题.首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失--容器以干净的状态(镜像最初的状态)重 ...

  3. elsa-core:4.ASP.NET Core Server with Elsa Dashboard

    在本快速入门中,我们将了解一个最小的 ASP.NET Core 应用程序,该应用程序承载 Elsa Dashboard 组件并将其连接到 Elsa Server. ElsaDashboard + Do ...

  4. java设计模式—单例模式(包含单例的破坏)

    什么是单例模式? 保证一个了类仅有一个实例,并提供一个访问它的全局访问点. 单例模式的应用场景? 网站的计数器,一般也是采用单例模式实现,否则难以同步: Web应用的配置对象的读取,一般也应用单例模式 ...

  5. 20210823 数数,数树,鼠树,ckw的树

    考场 乍一看都不好做 仔细想想发现 T1 的绝对值特别好,轮流选剩余的最大/最小值就行了 T2 又要计数,直接想部分分,发现一个 sb 容斥就有 35ps(但数据锅了,只有 25pts) T3 什么玩 ...

  6. SpringBoot 如何生成接口文档,老鸟们都这么玩的!

    大家好,我是飘渺. SpringBoot老鸟系列的文章已经写了两篇,每篇的阅读反响都还不错,果然大家还是对SpringBoot比较感兴趣.那今天我们就带来老鸟系列的第三篇:集成Swagger接口文档以 ...

  7. AntDesign VUE:Model组件的Button的事件this指向undefined的问题(箭头函数)

    问题 一个很简单的this指向问题引起的报错: 记录下来主要是想看看这玩意到底指向哪里: 真不戳 解决方法 ES6的箭头函数,有人理解它就是没有this指向,我个人理解是它的this指向函数体的上一级 ...

  8. WPF WPF中解决内存泄露的几点提示与解决方法

    http://www.cnblogs.com/LastPropose/archive/2011/08/01/2124359.html 一直以来用WPF做一个项目,但是开发中途发现内存开销太大,用ANT ...

  9. Maven专题3——生命周期与插件

    三套生命周期 Maven有3套相互独立的生命周期,用户可以调用某个生命周期的阶段,而不会对其他生命周期产生影响. 每个生命周期包含一些有先后顺序的阶段,后面的阶段依赖于前面的阶段,意味着用户调用后面的 ...

  10. Spring Boot 2.x 之 H2 数据库

    1. Spring Boot下H2数据库的常用配置项 # 指定数据库的类型 spring.datasource.platform=h2 # 数据库连接地址(文件模式) ## AUTO_SERVER=T ...