shell脚本操作

摘要:
shell文件语言终端打印输出1的echo指令echo“helloworld”变量。变量名必须是字母(a-z,a-z)+下划线_2。变量名不能有标点符号。3.变量名不能有空格。变量输出需要添加$符号,但=是不能添加空格的name=“smile2017”#。错误的表单添加了空格name=“smile2017”只读变量关键字readonly name=“leon”#只读名称属性readonly name#will

Shell文件语言

终端打印输出用echo指令

echo "hello world"

变量

1 . 变量名必须是字母(a-z,A-Z) + 下划线_

2 . 变量名中不能有标点符号

3 . 变量名中不能有空格

变量输出需要加$符号,但是=是不能加空格的

name="smile2017"
#错误的形式 加了空格
name = "smile2017" 

只读变量

关键字 readonly

name="leon"

#只读name属性
readonly name

#会报错,不会打印
name="sisi"

echo $name

#打印
./hello.sh: line 19: name: readonly variable

删除变量

关键字 unset

name="Andy"

#打印name
echo $name

#删除name
unset name

echo $name

变量类型

类型一:本地变量,作用域整个bash进程可以使用,语法:name="leon"
类型二:局部变量,作用域是当前代码块,用关键字local去修饰,语法:local name= "Andy"
类型三:环境变量,作用域当前shell进程以及子进程,语法:export name="Andy"
类型四:位置变量,${0},${1}等来填入输入不同变量。语法:name=${0},age=${1},echo "姓名${nane},年龄${age}"
例如:

#!/bin/bash
name=${1}
age=${2}
sex=${3}
echo"姓名:${name},年龄:${age},性别:${sex}"

最后执行脚本 执行脚本时写入变量
./hello.sh Jeff 150 男

#文件名称为${0},所以第一个参数从${1}开始

特殊变量

类型
$(0)->特殊变量->文件名称
$(?)->表示返回上一个命令执行状态返回值->0:表示执行成功,1:程序执行结果,2表示程序状态码返回(0-255)
$(#)->参数个数
$(*)->参数列表
$(@)->参数列表
$($)->参数当前shell的PID
$(!)->执行上一个指令的PID

$(*)$(@)的区别在于$(*)会将所有的参数组合成字符串输出,而$(@)会将参数一个一个输出。

字符串

字符串表示:
单引号或者双引号表示

字符串的拼接:
1. 直接用 ${name}${age}${sex}
2. 在变量中用引号info="姓名:"${name}" 年龄:${age}"

获取字符串长度:
在变量名前面直接加上#
eg:name=andy echo=${#name}

字符串截取
例如:

 name="leon is good boy"
 
 #从下标为2的字符串开始开始截取3位
 result=${name:2:3}
 
 #从字符串第5位开始截取,到最后一位
 #方式一:
 length=${#name}-1
 result1=${name:2:lenght}
 
 #方式二:默认后面直接到最后一个
 result2=${name:2}

字符串删除
${变量名#删除的字符串 正则表达式}

#匹配不到
name="i have a dream"
result=${name#dream}
echo ${result}

#默认从左到右匹配查询删除,不然就匹配不到
result1=${name#I}
echo ${result1}

#查找指定字符的第一个,并且删除前面所有的字符,并且包含自己
result2=${name#*D}
echo ${result2}

#指定删除范围
result3=${name#I*D}
echo ${result3}

#如果从右边开始检查就用##
reslut4=${name##*a}
echo ${reslut4}

#从字符串结尾开始匹配用%
result5=${name%m}
echo ${reslut5}

#查找指定字符的第一个,删除所有字符(包含自己)
result6=${name%h*}
echo ${result6}

#删除指定范围
result7=${name%a*m}
echo ${result7}

##方向从左往右
result8=${name%%a*m}
echo ${result8}

Shell语言的echo命令

我们都知道echo是打印输出的意思,那么echo可以怎么实现输入呢

  1. 显示普通的字符串,例如:echo "iPhoneX 标配8888"
  2. 显示转义字符,例如:echo "iPhone 顶配 10000"
  3. 显示变量,例如:iphone="iphoneX" echo "${iphone} 9888"
  4. 显示换行,必须要用-e来开启转义功能,例如:echo -e "iphoneX hello 未来"
  5. 不换行,不换行用c表示,例如:echo -e iPhoneX hello未来 c echo"科技"
  6. 显示一个执行命令,例如要求输入当前时间,用date
  7. 退出命令,exit 状态(详见下方的状态表),如果一旦执行了exit之后,后面的语句就不会继续执行了。
  8. 重定向

关于状态码:

状态码描述
0命令执行成功
1一般性未知错误
2不适合的shell命令
126命令不可执行
127没有找到命令
130通过ctrl+c终止的命令
255正常范围内推出的状态码

Shell语言的数组

语法

数组名=(值1 值2 值3...)

初始化

方式一:

name=("404" "andy" "hello" "world")

Shell

方式二:

name=()
name[1]="404"
name[2]="andy"
name[3]="hello"
name[4]="world"

Shell

读取数组

@或者*来输出所有的数组元素,但是@是将元素一个一个输出,*是将数组内元素组合成一个字符串输出。这点需要注意。

echo ${name[*]}
echo ${name[@]}

数组长度

之前说了在输出前面加#是输出字符串长度,这里同样适用于数组,在获取所有元素之后之后在数组前面加上#,如果是*的话,#同样适用,可以很智能的识别空格来进行对元素长度的识别解析。

echo ${#name[@]}
echo ${#name[*]}

如果需要获取单个元素字符长度我们则可以用具体的下标

echo ${#name[3]}

Shell语言的传递参数

语法定义:(终端输入)

./文件名称.sh 参数一 参数二 参数三

获取参数:

之前字符串章节说过用${1},${2}...表示,需要注意的是${0}表示文件名称

echo ${1} ${2} ${3}

Shell

复制

特殊字符

获取脚本输入参数个数

echo ${#}

Shell

复制

获取参数列表

echo ${*}

Shell语言的基本运算符

基本运算符

基本运算符就是我们所称的+ - * / %

a=1234
b=3214
c=`expr $a + $b`

Shell

可以注意到,在shell语言中,单纯的元素相加不能直接用+,而是必须要用expr去计算两个变量的值。而且如果调用,后面的变量名称和+之间必须要加上空格来保证变量的独立性。否则则会当成字符串输出。

注意:当且仅当用乘法的时候必须加上一个转义字符

a=1234
b=3214
c=`expr $a * $b`

Shell

赋值运算符

=
这个符号就很简单了,就不在做阐述了

关系运算符

一张表格阐述

shell脚本操作第1张

布尔运算符

一张表格阐述

shell脚本操作第2张

逻辑运算符

一张表格阐述

shell脚本操作第3张

字符串运算

一张表格阐述

shell脚本操作第4张

文件测试运算符

一张表格阐述

shell脚本操作第5张

循环控制语句

if-else

语法结构

if [条件]
    then
        代码
else if [条件]
    then
        代码
else
        代码
fi

Shell

记住判断最后要以fi结尾

例如我们来判定一个学生是不是男生:

sex="man"

if [ $sex = "man" ]
then
    echo "男生"
else
    echo "女生"
fi

for

语法结构

for 变量名 in item1 item2 item3 …
    do
        代码
    done

比如我们要循环打印一个数组中的元素:

names=("张三" "李四" "王五")
for i in ${names[@]}
do
    echo ${i}
done

while

语法结构

while(条件)
    do
        代码
    done

Shell

假设我们要一直循环直到while条件不成立

a=1
while(($a<10))
do
    echo ${a}
    a=`expr $a + 1`
done

case

case

语法结构

case 值 in
    模式1)
        代码
        ;;
    模式2)
        代码
        ;;
    模式3)
        代码
        ;;
    sac

判断number的值

number=1
case $number in
1) echo "等于1"
    ;;
2) echo "等于2"
    ;;
3) echo "等于3"
    ;;
esac

免责声明:文章转载自《shell脚本操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇grib2文件格式说明比较语义分割的几种结构:FCN,UNET,SegNet,PSPNet和Deeplab下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

c++ 中常量与变量 基本数据类型

c++中常量如何分类? 1、整数常量,所有的整数。 整数又分为 int (integer) 占用4个字节 一个字节占几个二进制位?8个二进制位,一个整型变量占32位二进制位 (内存中开辟出来的存储空间) 2、小数常量,所有的小数。 3、布尔型常量,只有两个值,true, false。 4、字符常量,一个字母或数字,用 '' 进行标识 5、字符串常量,一个或...

关于mysql installer 的安装和环境变量配置

MySQL针对不同的用户提供了2中不同的版本: MySQL Community Server:社区版。由MySQL开源社区开发者和爱好者提供技术支持,对开发者开放源代码并提供免费下载。 MySQL Enterprise Server:企业版。包括最全面的高级功能和管理工具,不过对用户收费。 下面讲到的MySQL安装都是以免费开源的社区版为基础。打开My...

PHP 开发基础知识学习笔记

PHP 基本知识 PHP 数组操作 关联数组: <?php $var = array("first"=>1,"second"=>2,"third"=>3,"montd"=>4); foreach ($var as $key => $value) { echo "键 --> {$key} --> 值 --&...

sql基础内容2

-- day16课程内容 --CREATE DATABASE day16;USE day16; -- *************一、数据约束********************------ 1.1 默认值CREATE TABLE student( id INT, NAME VARCHAR(20), address VARCHAR(20) DEFAULT...

perl 中的my和全局变量

$Some::stuff 使用包some的标准变量$stuff our 把名字限制于一个作用域, local 把值限制于一个作用域, my 把名字和值都限制于一个作用域 my变量: [root@master Webqq]# cat t5.pl {my $var=11;print "$var is 1--$var ";}{print "$va...

(转载)linux中shell变量

(转载)http://blog.csdn.net/zahuopuboss/article/details/8633891 为使shell编程更有效,系统提供了一些shell变量。shell变量可以保存诸如路径名、文件名或者一个数字这样的变量名。shell将其中任何设置都看做文本字符串。有两种变量,本地和环境。严格地说可以有4种,但其余两种是只读的,可以认为...