1、shell是一个解释型的脚本语言,是基于linux内核的一个外层保护工具  负责完成用户和内核间的交互。常见的解释型的语言:python  perl  go  lua

2、查看当前系统所支持的shell的类型:cat    /etc/shells

3、shell 的规则

① 新建一个shell脚本:       vim xxx.sh

② 运行环境设置:在shell脚本的第一行  要设置shell的类型:  # !/bin/bash

③ shell的注释:
        单行注释:在要注释的那一行的前边加上  #
            多行注释:
                           :<< 标识   这个标识可以自己定义一个单词
                            标识

#!/bin/bash        # 井与感叹号之间有一个空格echo "hello"    # 只要在终端里可以执行的命令,在这里都可以使用
#   echo "nihao!"
:<< iscat ./test.shecho "world"cat ./test.sh
isecho "space"

4、脚本的执行

第一种:
                        直接用      ./ 脚本的名字
                        这种执行要求脚本文件必须有可执行权限
                        假如没有可执行权限  要加上一个可执行权限,然后再执行
        第二种:    
                        bash 脚本的名字
                        这一种脚本文件没有可执行权限  也能执行

5、shell的变量

① shell里变量是没有类型之分的  直接定义即可。在使用的时候   在变量名字之前加上$
                tmp = 10
                echo $tmp

② shell变量的分类

普通变量:
                        tmp = 10
                        echo $tmp

#!/bin/bashecho "hello"tmp=10echo $tmp                        #结果为hello  10

特殊变量:
                        $* $@:脚本的所有的参数
                        $#:传给脚本的参数的个数
                        $0:脚本本身
                        $1:脚本的第一个参数
                        $?:上一条命令的执行结果         0表示成功    1表示失败

程序 运行结果

环境变量:由系统维护,用于设置系统的shell工作环境,极少数用户可以修改
                    PATH:指定当前命令寻找的路径
                    QTDIR:qt安装路径
                    USER:当前用户
                    SHELL:shell类型
                    HOSTNAME:当前主机名
                    LD_LIBRARY_PATH:查找库文件所在的路径

假如修改了一个环境变量,并且让他永久有效,就需要将环境变量相关的内容  放到/etc/profile文件里            (查看这个文件:vim /etc/profile)
export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH(设置动态库路径,这样就不用将动态库复制到usr/lib里了)
在/etc/profile文件的最下边加上环境变量的一句话:
                export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ldw/
执行souce命令  生效配置:source /etc/profile

③ shell变量的声明

变量声明:变量的名字=变量的值(等号两边不允许有空格)
                    变量取消定义:unset 变量名
                    变量的引用:$变量名、${变量名}

6、shell的运算符

算术运算符
                        第一种:var=$((1+1))
                        第二种:var=$[1+2]
                        第三种:let var=1+3            (如果在notepad++上面编辑,需要在此编辑器右下角切换为Unix(LF)模式)
                        第四种:var=$(expr 1 + 4)     运算符的后边要加上空格(加号后面要有一个空格)

# !/bin/bash
var=$((1+1))echo $var
var=$[1+2]echo $var
let var=1+3               echo $var
var=$(expr 1 + 4)echo $var

条件测试语句
                        test 表达式1 = 表达式2        等号两边须有空格
                        test string1 == string2      条件表达式值为真返回0,为假返回非0
                        echo $?        非0为假,0为真

算术比较运算符
                        gt:大于
                        lt:小于
                        eq:等于
                        ge:大于等于
                        le:小于等于
                        ne:不等于
                                              如: [ 1 -lt 10 ]    1小于10        (数字左右都要有空格,否则报错)
                判断表达式
                        -a 要求两个条件都满足  and
                        -o 两个条件有一个满足即可  or
                                   [ 1 -gt 10   -a   2 -lt 10 ]   与
                                   [ 1 -gt 10   -o   2 -lt 10 ]   或

#!/bin/bash
tmp="hell"
test $tmp = "hello"
echo $?[ 9 -gt 7 ]
echo $?[ 7 -gt 3 -a 11 -lt 10 ]
echo $?[ 1 -gt 3 -o 11 -lt 10 ]
echo $?
#结果为:1 0 1 1

字符串的比较
                        [[ -z $str ]]
                        假如字符串的长度为0  则返回0
                        [[ $str1 == $str2 ]] 判断两个字符串是否相等
                        [[ $str1 != $str2 ]] 判断两个字符串是否不相等

#!/bin/bash
str1="hello"
str2="world"
[[ -z $str1 ]]echo $?
[[ $str1 == $str2 ]]echo $?
[[ $str1 != $str2 ]]echo $?
#结果为:1 1 0

7、shell流程控制语句

 if else语句
                        if [ 条件 1 ]
                        then
                            做一些动作
                        elif [ 条件2 ]
                        then
                            做一些动作
                        else
                            命令
                        fi

#!/bin/bash
var1=$1                       #类似主函数传参:$1是第一个参数;$2是第二个参数
var2=$2
if [ $var1 -gt $var2 ]
thenecho $var1
elif [ $var1 -lt $var2 ]
thenecho $var2
elseecho "com"
fi

case语句
                    case $变量名 in
                        "1")
                            命令1
                            ;;
                        "2" )
                            命令 2
                            ;;
                        *)
                            命令 3
                           ;;
                    esac

#!/bin/bash
echo "请输入一个数字:"
read a;                 # 从标准输入里面读取内容给变量 a
case $a in              # a 的各种情况"1")                # 当a为1时,输出:你好       echo "你好";;"2")echo "hello world";;*)echo "输入无效";;
esac

for语句
                    形式一
                        for x in 列表
                        do
                            命令1
                        done

#!/bin/bashfor i in 1 2 3 4 5 6doecho $idone
#输出:1 2 3 4 5 6

形式二
                        for((i=0;i<5;i++))
                        do
                            echo $i
                        done

#!/bin/bash
for((i=0;i<5;i++))
doecho $i
done
#输出:0 1 2 3 4

while语句
                    形式一
                        while [ 循环条件 ]
                        do
                            命令1
                        done

#!/bin/bash
a=0
while [ $a -lt 10 ]
doecho $aa=$(($a+1))
done
#输出:0 1 2 3 4 5 6 7 8 9

形式二:
                        while((循环条件))
                        do
                            命令1
                        done

#!/bin/bash
i=0
while(($i < 10))
doecho $ii=$(($i+1))
done
#输出:0 1 2 3 4 5 6 7 8 9

until语句
                    形式一
                        until [ 结束的条件 ]
                        do
                            命令1
                        done

#!/bin/bash
i=0
until [ $i -gt 10 ]
doecho $ii=$(($i+1))
done
#输出;0 1 2 3 4 5 6 7 8 9 10

形式二:
                        until((结束的条件))
                        do
                            命令1
                        done

#!/bin/bash
i=0
until(($i>10))
doecho $ii=$(($i+1))
done
#输出:0 1 2 3 4 5 6 7 8 9 10

8、shell数组

数组的定义
            形式一:a=(1 2 3 4 5 6)
            形式二:a[0]=1;a[1]=2;a[2]=3;
            形式三:a=([0]=1 [1]=2 [2]=3)

数组的引用
            取某个数组元素的值:${a[1]}:取数组里第二个元素的值
            取数组里的所有的值:${a[@]}
            取数组的长度:${#a[@]}
            截取下标为2以后的所有的元素:${a[@]:2}
            截取下标为2以后的两个元素:${a[@]:2:2}

#!/bin/bash
a=(1 2 3 4 5)
echo "all:${a[@]}"
echo "第一个成员${a[0]}"
echo "数组的长度:${#a[@]}"
echo "数组下标为2以后的所有的元素:${a[@]:2}"
echo "数组下标为2以后的两个元素:${a[@]:2:2}"
#输出:
#all:1 2 3 4 5
#第一个成员1
#数组的长度:5
#数组下标为2以后的所有的元素:3 4 5
#数组下标为2以后的两个元素:3 4

9、shell函数

特点:
                    无返回值
                    无参数
                    仅仅用来封装代码  调用的时候直接写函数名即可

#!/bin/bash
function add()
{return $(( $1+$2))
}echo "请输入一个数字"
read a                     #把读取到的数字给a
echo "请再输入一个数字"
read b                     #把读取到的数字给badd a b                    #调用函数,传参
echo $?                    #输出返回值
#如果输入2,3   则输出5

附:小项目

#!/bin/bash                       #实现判断闰年和非闰年read year
NUM=`expr $year % 4`
NUM2=`expr $year % 100`
NUM3=`expr $year % 400`if test  $NUM -eq 0 -a $NUM2 -ne 0 -o $NUM3 -eq 0
thenecho "$year 是闰年!"
elseecho "$year 不是闰年!"
fi
#!/bin/bash                      #实现一个简单的计算器read a b ccase $b in"+")echo "$a + $c = $(expr $a + $c)";;
"-")echo "$a - $c = $(expr $a - $c)";;
"*")echo "$a * $c = $(expr $a \* $c)";;
"/")echo "$a / $c = $(expr $a / $c)";;esac 

Shell编程---------初学者入门相关推荐

  1. JavaScript_牛客网_编程初学者入门训练(21-30题解)

    牛客网编程初学者入门训练题解JavaScript版本 编程初学者入门训练第21-30题解答(js) 22.你能活多少秒 25.计算体重指数 26.计算三角形的周长和面积 27.计算球体体积 28.大小 ...

  2. java编程题身高排队_编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身...

    编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身 编程初学者入门4_从键盘输入5个人的身高(米),求他们的平均身高(米).(C的没什么问题,试着用Java写一下,Java的Scanner ...

  3. Shell编程从入门到入土

    1. Shell 编程的作用 将一些复杂的命令简单化(平时我们提交一次github代码可能需要很多步骤,但是可以用Shell简化成一步) 可以写一些脚本自动实现一个工程中自动更换最新的sdk(库) 自 ...

  4. 牛客网 编程初学者入门训练 BC133 KiKi说祝福语

    题目来源:牛客网 编程初学者入门训练 BC133 KiKi说祝福语 import java.util.Scanner; public class Main {public static void ma ...

  5. JavaScript_牛客网_编程初学者入门训练(131-140题解)

    牛客网编程初学者入门训练题解JavaScript版本 编程初学者入门训练第131-140题解答(js) 131.KiKi学程序设计基础 132.KiKi算期末成绩 133.KiKi说祝福语 134.K ...

  6. 「Linux」Linux Shell 编程基础入门

    Linux Shell 编程基础入门 1. 变量 1.1 变量定义 1.2 使用变量 1.3 引号 1.4 将命令的结果赋值给变量 1.5 位置参数 1.6 特殊变量及其含义 2. 字符串 2.1 字 ...

  7. 区块链编程初学者入门指南

    我有很多问题需要了解区块链Blockchain的工作原理.重要的是"我如何在其上构建应用程序dapp?".花了几个星期的时间挖掘,阅读和试验才最终了解.我找不到简短而全面的指南.现 ...

  8. 牛客网 编程初学者入门训练 BC37 网购 Java

    题目来源:牛客网 编程初学者入门训练 BC37 网购 import java.util.Scanner; public class Main {public static void main(Stri ...

  9. 牛客网 编程初学者入门训练 BC3 有容乃大 Java

    题目来源:牛客网 编程初学者入门训练 BC3 有容乃大 public class Main {public static void main(String[] args) {System.out.pr ...

最新文章

  1. 20145222黄亚奇《Java程序设计》第1周学习总结
  2. html台风路径,常用气象网站功能简介
  3. 把一个一维数组转换为in ()
  4. Some Essential JavaScript Questions And Answers(5)
  5. MySQL修改字符集
  6. 【HDU - 5918 】Sequence I (数组(字符串)匹配问题,可选KMP)
  7. 1.0Tensorflow中出现编译问题的解决方案
  8. (进阶)LeetCode(258)——各位相加(JavaScript)
  9. 如何自动维护全文索引和目录
  10. 添加谷歌账户显示与服务器,解决添加google同步帐户出错竟然可以这般简单!
  11. arcgis中给属性文件加x y坐标
  12. powerbi嵌入到HTML5,如何把Power BI嵌入到Web应用中
  13. sonar代码审查问题分析
  14. STL 容器详解——string 类
  15. Android正方教务系统课程表+查成绩+查考试安排
  16. 大学计算机基础导论备考
  17. HP LaserJet 1010 打印机 - 在 Win 7 下安装驱动
  18. 白嫖 IObit 系列软件例如 IObit Uninstaller
  19. MACD指标5种背离分析(图解)
  20. 鸿蒙系统照样没有谷歌服务,曝华为Mate40 Pro+升级鸿蒙2.0系统 谷歌服务照样能用...

热门文章

  1. 文本编辑器的简单实现(附源代码)
  2. Cadence Allegro导入DXF文件图文教程及视频演示
  3. 网关测试报告—以部标JT808为例
  4. 万兆网SFP/SFP+设计
  5. windows 蓝牙程序开发 ble低功耗蓝牙
  6. 使用ZeroMemory、memset对结构体、数组的初始化
  7. 【又做了个视频......】到底什么是5G LAN?
  8. 鸟音消澡声不求人:音频录制编辑软件COOL EDIT 教
  9. pytorch scatter和scatter_详解
  10. 2022年油分散剂市场前景分析及研究报告