shell基本知识汇总

一.shell的概念

shell 是操作系统的最外层, shell 可以合并编程语言以控制进程和文件,以及启动和控制其它程序。 shell 通过提示您输入,向操作系统解释该输入(类比ls),然后处理来自操作系统的任何结果输出来管理您与操作系统之间的交互。shell仿佛就像一个媒介,你可以通过提示来输入命令,shell将这些命令翻译后传给内核/操作系统去执行,将结果输出给你。
简单来说 Shell 就是一个用户跟操作系统之间的一个命令解释器(Shell是解释性语言 无需进行编译)( C语言是一种结构化语言 需要进行编译)。

二.Linux常用shell种类

不同的shell具备不同的功能,shell还决定了Linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。
bash:大多数Linux系统默认使用的shell,bash shell是Bourne shell 的一个免费版本,它是最早的Unix shell,bash还有一个特点,可以通过–help命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
ubuntu采用的为bash。

三.创建一个脚本文件

1.首先使用vim创建一个.sh类型的文件;
2.打开这个.sh文件后,输入想要输入的命令
3.使用"chmod"命令来给文件加权限
4.执行./文件名.sh执行即可。(无需编译,解释型语言)

四.Shell编程讲解

  1. 4.1 Shell中数据类型 对于**shell只有一种数据类型:**字符串string

  2. 4.2 Shell中变量 Shell编程语言是非类型型的解释型语言,不像C++/JAVA语言编程时需要先声明变量,shell给一个变量赋值,实际上就定义了变量,在linux支持的shell中,都可以用赋值符号”=”为变量进行赋值。

4.2.1Shell 变量的作用域可以分为三种
①局部变量(local variable):有的变量只能在函数内部使用;
②全局变量(global variable):有的变量可以在当前 Shell 进程中使用;
③环境变量(environment variable):而有的变量还可以在子进程中使用。
重点:shell给一个变量赋值,实际上就定义了变量。
4.2.2全局变量
全局变量:在shell函数内定义的变量也默认为全局变量,它和在函数外部定义的变量拥有同一种效果;
4.2.3局部变量
局部变量:有的变量只能在函数内部使用;要想变量的作用域仅限于函数内部,可以在定义时加上local命令,此时该变量就成了局部变量。
4.2.4环境变量
全局变量只在当前 Shell 进程中有效,对其它 Shell 进程和子进程都无效。如果使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,这称为“环境变量”。

  1. 4.3 Shell中运算符

    Shell 脚本中 ‘$’ 符号的多种用法:
    $0 当前脚本的文件名 类比于主函数传参argv[0]
    $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
    $* 传递给脚本或函数的所有参数。例如:可以完成for in列表参数 argv[1]—argv[n]
    $# 传递给脚本或函数的参数个数。 个数:argc-1
    $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID
    $UID 当前用户的 ID
    $PWD 当前所在的目录

例子:4.3.0
引用变量 引用变量时,使用 $ 符号直接来进行引用(使用 ${ } 作为单词边界),以及包括循环变量;
利用双引号””将括起来的字符串支持变量插值;
利用单引号’’将括起来的字符串进行输出;(不支持变量插值)
在这里插入图片描述在这里插入图片描述
例子:4.3.1脚本传参(主函数传参)
在这里插入图片描述在这里插入图片描述
例子:4.3.2使用 ${#} 获取变量字符串长度
在这里插入图片描述在这里插入图片描述
例子:4.3.3 $()与反单引号--------获取执行后的结果,用输出函数进行打印测试
在这里插入图片描述在这里插入图片描述

  1. 4.4 Shell中数组
    Shell内数组的长度是可变的。
    初始化: a=(1 2 3 4 5) #数组a里面放的元素分别是1 2 3 4 5,元素与元素之间用空格间隔;
    如何引用(取数组里面的值): ${数组名[下标]}
#!/bin/bash
cp ./1.sh 2.sh
buff=(1 2 3 4 5 6)
echo "数组中:${buff[2]}"
buff[1000]=1000
echo "数组下标为1000:${buff[1000]}"

五.Shell编程之控制语句讲解

5.1 if/else条件语句

if 条件 ;then
  执行语句
elif 条件 ;then
执行语句
else
  执行语句
fi     
if 条件 
then
  执行语句
elif 条件 
then
执行语句
else
  执行语句
fi          #结束

if/else具有两种条件表达方式:
1、对比数值的方法:((…)),本种只针对于数值比较 ;
2、万能对比的方法(范围是所有类型)
对比数值的方法:((…))

#!/bin/bash
A=100
B=20
if ((A > B))
then
	echo "A>B"
elif ((A < B))
then 
	echo "A<B"
fi

万能对比的方法:用双[ 条件 ]:注意条件与中括号之间有一个空格

if  [ 条件 ] ;then
  执行语句
elif  [ 条件 ]  ;then
执行语句
else
  执行语句
fi          #结束
#!/bin/bash
echo "请输入测试文件名是否存在"
read A
echo "测试文件夹是否存在"
read B
#判断语句
if [ -d $B ] && [ -f $A ]   ####if [ -d $B -a -f $A ]
then
	echo "真"
else
	echo "假"
fi
格式IF常见判断逻辑运算符详解
-d判断目录是否存在eg:if [-d dir];
-eq等于,应用于整性比较equal;

5.2 case分支语句
case语句主要适用于以下情况:某个变量存在多种取值(确定值),需要对其中的每一种取值分别执行不同的命令序列。这种情况与分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句只是判断一个变量的不同取值。case分支语句的语法结构如下所示:

case  变量值 in 
模式1)
命令序列
 ;;                #类似于c语言中switch的break
  模式2)
命令序列
;;               #类似于c语言中switch的break
……
*)                #*通配符相当于default:序列 
esac

*与C语言中switch case语句的差别在下方的default 与 )之处
在这里插入图片描述
在这里插入图片描述

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值