shell基础学习总结

shell基础学习总结shell基础教程,里面包含代码

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

shell基础

(一)shell介绍
(二)shell语法
(三)变量
(四)输入输出
(五)分支语句

  • if
  • case

(六)流程控制

  • while
  • for
  • until

(七)数组
(八)函数

(一)shell介绍

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
优点:擅长文件处理,操作系统管理,实现批量的操作
解释性语言,移植性好
缺点:执行效率低,不擅长数据计算和数据处理

(二)shell注意点

#!/bin/bash
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
#代表注释 ,!代表不是注释

author:XXX
created Time:脚本的创建的时间
modify Time:修改脚本时间
Script description:该脚本的作用

查看支持的shell的类型:
cat /etc/shells
/etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash

编写的流程:

  1. vi XXX.sh
  2. chmod +x XXX.sh
  3. sh XXX.sh或者./XXX.sh

shell中的的特殊符号的含义:
~:家目录
!:上一条命令
$:取变量内容符号
&:后台执行的
*:通配符
?:匹配 单个字符
;:多条命令分割
单引号:不能解释变量,能够进行将命令进行执行

(三)变量

自定义变量

a=10  不加空格
echo $a

str="this is a string" 不加空格
echo $str

只读变量

readonly myUrl
myUrl="https://www.runoob.com"

环境变量

echo $PATH # 环境变量
echo $PWD  # 当前的路径
echo $HOME # 当前用户的家目录
echo $0 # 当前执行脚本的名称

位置变量

echo $0 # 当前执行脚本的名称
echo $1 # 第1个的参数
echo $2 # 第2个的参数
echo $3 # 第3个的参数
echo $4 # 第4个的参数
echo $# # 参数的个数
echo $? # 上一条命令执行的结果
echo $$ # 当前脚本的PID号

字符串(双引号)

字符串的拼接
str=“this is a string”
join_str=“name+${str}”
echo $join_str

(四)输入输出
read a
read b
echo a = $a
echo b = $b
运行时,输入一个数后需要回车,再输入另一个数
原因:read 一次读取一行

“”(双引号):打印字符串,遇到 变 量 则 打 印 变 量 中 的 值 ′ ′ ( 单 引 号 ) : 打 印 字 符 串 , 遇 到 变量则打印变量中的值 ”(单引号):打印字符串,遇到 :,变量依然打印$变量
“:将中间的字符串按照命令打印

a=10
b=20
sum=`expr $a + $b`  中间需要加空格
echo $sum

总结:计算器的实现

#!/bin/bash
#author:4518
#created time:0105
echo --------shell脚本实现计算器-------------
echo "请分别输入2个数"
read num1
read num2
echo ------相加结果如下----------------------
val=`expr $num1 + $num2`
echo $val
echo ------相减结果如下----------------------
val=`expr $num1 - $num2`
echo $val
echo ------相乘结果如下----------------------
val=`expr $num1 \* $num2`
echo $val
echo ------相除结果如下----------------------
val=`expr $num1 / $num2`
echo $val
echo ------取余结果如下----------------------
val=`expr $num1 % $num2`
echo $val
(五)分支语句

(1)常用的判断语句:
test -eq 相等
-ne 不相等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
例如:判断2个数的大小

echo ------判断语句---------------
read num1
read num2
if [ $num1 -gt $num2 ]
then
    echo "max num is num1:$num1"
else
    echo "max num is num1:$num2"
fi

判断输入的成绩

echo ------输入成绩,判断等级--------
read grade
if [ $grade -ge 0 ] && [ $grade -le 100 ]
then
    echo "输入的成绩为:$grade"
    if [ $grade -ge 0 ] && [ $grade -le 59 ]
    then
        echo "不及格"
    fi
    if [ $grade -ge 60 ] && [ $grade -le 69 ]
    then
        echo "及格"
    fi
    if [ $grade -ge 70 ] && [ $grade -le 79 ]
    then
        echo "良好"
    fi
    if [ $grade -ge 80 ] && [ $grade -le 89 ]
    then
        echo "中等"
    fi
    if [ $grade -ge 90 ] && [ $grade -le 100 ]
    then
        echo "优秀"
    fi
else
    echo "输入的成绩错误"
fi

(二)判断文件的类型
test
-b 块设备文件
-c 字符设备文件
-d 目录文件
-f 普通文件
-L 链接文件
-S 套接字文件
-p 管道文件

echo -----判断文件的类型-------------
read filename
if [ ! -e $filename ]
then
    echo "文件不存在"
else
    echo "文件存在"
    if [ -d $filename ]
    then
        echo "目录文件"
    fi
    if [ -f $filename ]
    then
        echo "普通文件"
    fi
fi

(三)case语句

#!/bin/bash
# author:4518
# created time:0105
echo ----case实现成绩分等级------------
read grade
rank=`expr $grade / 10`
echo $rank
case $rank in  # 需要保证rank和下面的数字选项相等
    10) echo "优秀"
        ;;
    9) echo "优秀"
        ;;
    8) echo "中等"
        ;;
    7) echo "良好"
        ;;
    6) echo "及格"
        ;;
    4) echo "不及格"
        ;;
    3) echo "不及格"
        ;;
    2) echo "不及格"
        ;;
    1) echo "不及格"
        ;;
    0) echo "不及格"
        ;;
    *) echo "输入错误"
        ;;
esac
(六)流程控制

while

i=0
sum=0
while [ $i -le 100 ]
do
	sum=`expr $sum + $i`
	i=`expr $i + 1`
done

until

until [ $i -gt 100 ]
do
	sum=`expr $sum + $i`
	i=`expr $i + 1`
done

echo "i = $i, sum = $sum"

for

i=0
sum=0

#for i in {1..100} 第一种
#for ((i = 0; i < 101; i++)) 第二种
for i in `seq 100` 第三种
do
	sum=`expr $sum + $i`
done

echo "i = $i, sum = $sum"
(七)数组
#!/bin/bash
# author:4518
array=("A1" "B1" "C1" "D1" "E1" "F1" "G11" "YYY")
i=0
while [ $i -lt ${#array[*]} ]
do
    echo "数组的第`expr $i + 1`个元素为${array[$i]}"
    i=`expr $i + 1`
done
echo "数组的所有的元素为: ${array[*]}"
echo "数组的长度为:${#array[*]}"
(八)函数

函数的返回值是里面打印的东西
例如:

read num1
read num2

add()
{
	sum=0
	sum=`expr $1 + $2`

	echo hello world
	echo how are you
	echo ni hao

	return 80
}

ret=`add $num1 $num2`
echo "$?"  结果为80
echo "$ret" 结果为hello world,how are you

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EYHVzOI2-1641389080704)(en-resource://database/1422:0)]
例子2:利用函数的方法进行2个数求和

read num1
read num2
add()
{
    val=`expr $num1 + $num2`
    echo $val
}
echo -----函数调用如下------------------
ret=`add $num1 $num2`
echo $ret
(九)

遇到的问题总结:
root@linux:/mnt/hgfs/gittree_project/shell# sh array.sh
array.sh: 3: Syntax error: “(” unexpected
解决办法:
root@linux:/mnt/hgfs/gittree_project/shell# bash array.sh
数组的第1个元素为A1
数组的第2个元素为B1
结果执行成功
在这里插入图片描述

(十)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168444.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 容器技术详解_容器化技术

    容器技术详解_容器化技术一、什么是容器?IT里的容器技术是英文单词LinuxContainer的直译。container这个单词有集装箱、容器的含义(主要偏集装箱意思)。不过,在中文环境下,咱们要交流要传授,如果翻译成“集装箱技术”就有点拗口,所以结合中国人的吐字习惯和文化背景,更喜欢用容器这个词。不过,如果要形象的理解LinuxContainer技术的话,还是得念成集装箱会比较好。我们知道,海边码头里的集装箱…

    2022年10月28日
  • CGLIB(Code Generation Library)详解[通俗易懂]

    CGLIB(Code Generation Library)详解[通俗易懂]什么是CGLIBCGLIB是一个强大的、高性能的代码生成库。其被广泛应用于AOP框架(Spring、dynaop)中,用以提供方法拦截操作。Hibernate作为一个比较受欢迎的ORM框架,同样使用CGLIB来代理单端(多对一和一对一)关联(延迟提取集合使用的另一种机制)。CGLIB作为一个开源项目,其代码托管在github,地址为:https://github.com/cglib/cglib为什么

  • VS 2015 序列号/密钥/企业版/专业版

    VS 2015 序列号/密钥/企业版/专业版专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV转载于:https://www.cnblogs.com/bqh10086/p/vs2015.html

  • 基于麦克风阵列的现有声源定位技术有_阵列原理

    基于麦克风阵列的现有声源定位技术有_阵列原理专利名称:使用麦克风阵列对声源定位的方法技术领域:本发明涉及声源的定位,更具体地讲,涉及一种使用麦克风(MIC)阵列来对声源定位的方法。背景技术:阵列信号处理已经广泛应用于通信、雷达、声纳、医学和航天航空等诸多领域。近年来,随着反恐战的开展,各国已经研制了各种探测爆炸点或枪炮射击点的位置的设备。在实际应用中,由于视觉定位往往不易实现,从而发展了一些声学定位的系统,例如,美国的回力棒系统、以…

  • 中国北斗卫星导航系统官方免费下载_北斗导航怎么样好用吗

    中国北斗卫星导航系统官方免费下载_北斗导航怎么样好用吗国产激光雷达:EagleEye2000的测试报告

  • stm32的语音识别_基于STM32的嵌入式语音识别模块设计

    stm32的语音识别_基于STM32的嵌入式语音识别模块设计引言服务机器人以服务为目的,因此人们需要一种更方便、更自然、更加人性化的方式与机器人交互,而不再满足于复杂的键盘和按钮操作。基于听觉的人机交互是该领域的一个重要发展方向。目前主流的语音识别技术是基于统计模式。然而,由于统计模型训练算法复杂,运算量大,一般由工控机、PC机或笔记本来完成,这无疑限制了它的运用。嵌入式语音交互已成为目前研究的热门课题。嵌入式语音识别系统和PC机的语音识别系统相比,虽然其…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号