Xshell

当Linux操作系统配置完网络后,就可以使用XShell连接Linux了。

什么是shell?

Shell是C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言,脚本编程语言。

如何下载Xshell?

在中国人这里没有什么是不能破解的,去网上搜索Xshell,根据自己的需求选择版本,我使用的是Xshell 5 。它好在后续不要收费。使用Linux的IP地址连接,连接后让你登录,证明你的网络配置没有问题就可以进行命令操作了。

为什么要使用vim?

这里就要再来细讲一下vim 

  • 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。
  • vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

那vim到底是个什么东西呢?

vim是从vi发展出来的一个文本编辑器,代码补全,编译及错误跳转等方便编程的功能特别丰富,被我们广泛应用。相当来说,新开发的东西肯定比老式的vi更加全面。

但是许多Xshell没有自动下载vim编辑器,这个时候我们就得使用一个命令去下载,如果已经有了会更新。

 yum -y install vim*

如何使用vi/vim编写脚本?

在学习Linux的时候应该学习过这个,建议稍微了解一下Linux操作系统,在学习Xshall。我听前辈们的话就是,学习这件事要一步步来,慢点都没关系,主要要吃透,不能好高骛远。

基本上vi/vim 分为 命令模式输入模式底线命令模式 ,分别的作用:

命令模式

使用格式:vi 或vim命令  文件名

用户刚启动vi/vim命令,进入的就是命令模式

此状态下任何键盘敲下的动作都会被识别为命令,而不是输入字符,以下是常用命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • shift + : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。命令模式只有一些最基本的命令,因此仍要依靠shift+:底线命令模式输入更多命令。

输入模式

在命令模式按下i就进入了输入模式,按Esc就回到命令模式 

底线命令模式

在命令模式按下Shift+:进入底线命令模式

在底线命令模式输入 w 保存文件  q退出程序  可以wq保存退出  ,!q不保存退出,按Esc随时退出底线命令模式

对于这三个模式的整体结构,可以把命令模式看成输入模式和底线命令模式的中间介,输入模式负责编写,底线命令模式负责退出。


然后就进入我们的正题,Shell脚本编程。

一.第一个Hello World ?

在学习一门语言的第一课讲的都是Hello world,这里也不例外。

首先使用文本编辑器(vi/vim)创建打开一个文件  test.sh,后缀sh代表(shell),扩展名虽然不影响文件运行,但是处于一种规范。建议这样。当你第一次直接用vim创建他是不会有颜色的,第二次编辑才会出现。

 首先按下i进入文本编辑模式,输入以下

#!/bin/bash

echo "Hello world !"

#!是一个约定的标记,它会告诉系统需要由什么解释器来执行,就使用哪一种Shell

echo就相当于Java当中的System.out.println  (); 

然后Esc退回命令模式,按下【Shift+:】到底线命令模式 wq保存退出,然后输入以下代码执行

sh  ./test.sh


二.Shell变量

在开始之前先看一下变量定义的规范:

变量名和等于号之间不能有空格

命名只能使用英文字母,数字和下划线 不能使用数字开头,中间不能有空格只能下划线,不能使用标点符号,不能使用bash关键字(help查看保留关键字),使用echo输出变量的时候建议格式${变量}

定义变量的四种方式: 

1.局部变量

#! /bin/bash        (头文件)
Str="Holle world"
echo ${Str}

 2.外传参数

文本编辑

var=$1
echo ${var}
var1=$2
echo ${var1}

查看结果文件后面填参数 空格隔开,不填就没有输出结果 $#可以查看外部传参的个数

[root@localhost shell.sh]# sh ./shell.sh a b
Holle world
a
b

 3.命令变量

所有查询命令都可以作为变量的赋值

重新写一个文件里面写一个局部变量,然后回到此文件,这样就能获得另一个文件的内容

String=$(cat ./test.sh)
echo ${String}

 4.环境变量  

首先得配置LinuxJDK环境变量

java="$JAVA_HOME"
echo "$java"

字符串截取

length="abcdefcg"

意思是从下标为2的位置开始,包括起始元素,输出六个 这里的结果为cdefcg
echo ${length:2:6} 

变量操作

readonly 变量  :将变量定义为只读
unset 变量:清除指定变量 


三.数组

数组中可以定义多个值,Bash Shell只支持一维数组,初始化不用定义数组大小。与大部分编程语言一样,下标从0开始

数组用括号来表示,元素用空格隔

格式:arrays=(value value1 value2......)

创建一个数组

ayyays=(aaa bbb ccc ddd eee)

通过下标获取元素 

echo ${ayyays[0]}
echo ${ayyays[1]}
echo ${ayyays[2]}
echo ${ayyays[3]}

获取数组所有元素

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

 把bbb修改成ooo

ayyays[1]=ooo
echo ${ayyays[1]}

 获取数组的元素个数

echo "${#ayyays[@]}"

获取下标为1的个数

echo ${#ayyays[1]}

怎么从数组元素中获取某个

echo  `expr index "${ayyays[1]}" o` 


四.Shell echo命令

有人会说了上面不是提过了吗,字符串输出,为什么还要拉出来讲一遍,因为这里有一个重要的点需要讲一下。

就是双引号和单引号的区别, 双引号会识别双引号内的变量、命令等等,但是单引号是直接字符串输出,不进行转义或取变量,默认是双引号。


五.Shell 基本运算符 

Shell和其他编程语言一样都支持多种运算符:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 逻辑运算符
  • 字符串运算符
  • 文件测试运算符

原生的bash不支持简单的数学运算,但是通过其他命令去完成,如awk 和 expr

expr是一款表达式计算工具,使用它能完成表达式的求值操作。

算数运算符

expr规范切记:+ - *  / 两边用的是反引号 *是关键字 需要进行\转义,不然会报错

算数运算符格式:var= expr ` 1 + 1  ` 条件表达式必须用空格隔开,不然会当作字符串输出

假设 变量a=10 ,b=20.

运算符说明举例
+加法`expr $a + $b` 结果为 30。
-减法`expr $a - $b` 结果为 -10。
\*乘法`expr $a \* $b` 结果为  200。
/除法`expr $b / $a` 结果为 2。
%取余`expr $b % $a` 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]


关系运算符 

在学习关系运算符前先来看看Xshell流程控制语句的 if 语句,为了方便我们下面测试运算符的效果

if格式:

if  [  条件表达式  ];

then

执行语句;

fi

 if else格式:

if  [  条件表达式  ];

then

执行语句;

else

执行语句;

fi

if elif格式:

 if  [  条件表达式  ];

then

执行语句;

elif [ 条件表达式 ];

then

执行语句;

else

执行语句;

fi

 然后开始学习逻辑运算符,运算符通常来说都是与流程控制语句搭配使用。

 什么是关系运算符?

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。(>)[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。(<)[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。(>=)[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。(<=)[ $a -le $b ] 返回 true。

 这样字看可能比较抽象,我们使用流程语句来看看。

首先定义两个变量 a=10 ,b=20

a=10
b=20
#只要把条件表达式里面的关系运算符换一下就可以了,这里就不做其他演示了
if [ ${a} -eq ${b} ];
then
echo "true";
else
echo "false";
fi
#这条的输出结果为false ,因为a不等于b

布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。
#本来两个值是不相等的,结果为ture,在前面加上!非运算就为false了
a=10
b=20
if [ ! ${a} != ${b} ];
then
echo "true";
else
#或运算只要有一个为true结果就为true a<20 b>100 显然前面的是正确的所以为true
if [ $a -lt 20 -o $b -gt 100 ] ;
then
echo "true";
else
echo "false";
fi

#与运算只要有一个为false就都为false所以把-o改成-a就变成了false

逻辑运算符

运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true

&& 只要一个错就为false

| |   只要一个对就为true  


字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":

运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否不相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否不为 0,不为 0 返回 true。[ -n "$a" ] 返回 true。
$检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。

 定义两个字符串变量 a=abc  b=efg

#显然两个变量的字符是不相等的所以为fales ,其他的改一下之间的=就好了。
a=abc
b=efg
if [ ${a} = ${b} ];
then
echo "true";
else
echo "false";
fi
#这里字符串长度不为0,返回false 其他的不做展示把 -z 换一下即可
if [ -z ${a} ];
then
echo "true";
else
echo "false";
fi

后续持续更新........


版权声明:本文为CSDNzgcxy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。