精华内容
下载资源
问答
  • linuxshell脚本编写
    2022-05-01 11:34:11

    认识脚本
    脚本(Script),是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。——摘自百度百科
    长用的脚本有shell、python…
    学习shell脚本的第一天
    掌握知识有:
    shell脚本的组成(如何编写一个shell脚本)
    shell脚本的执行(两种1.给予执行权限;2.解释器运行,不需要全权限
    shell中的符号
    shell中管道的使用
    shell的输入和输出
    shell中的变量
    shell数组
    shell中的运算(在shell中一般除理的是整型数据,浮点型需要经过处理)
    正文
    shell脚本的组成(如何编写一个shell脚本)
    1.解释环境,shell中的注释使用#来实现,而#!后面跟的路径表示shell的解释环境位置,一般指定为/bin/bash目录所以第一行一般默认#!/bin/bash即可;
    2.注释说明,包括作者、脚本实现功能、编写日期、版本等;
    3.执行代码,即通过编写的脚本语法实现某一功能,这也是编写shell中最核心的部分
    shell脚本的执行(两种1.给予执行权限;2.解释器运行,不需要全权限
    1.shell脚本的执行方式有两种,一种是通过查看权限,当前用户是否有权执行,没有权限执行shell的话通过chmod 777(最简单的方式)来获取全部权限来执行shell,后在shell所做目录下执行./filename.sh即可
    2.第2种执行shell的方式是通过解释器直接运行的方式,来执行shell脚本,一般有bash filename.sh(其他可以根据存放解释器目录下的文件来查看)
    shell中的符号
    ~:家目录
    !:执行历史命令
    $:取变量内容
    + - * / %:数学运算符
    &:后台执行
    *:通配符
    ?:匹配除回车以外的一个字符
    ;:命令分隔符
    |:管道符,该符号的上一条命令的输出做其下一条命令的输入
    \:转义符
    ":反引符,命令中执行命令
    ’ ':单引符,脚本中的字符串需要用引号引起来,单引号不能解释变量
    " ":双引符,与单引号类似,区别在于可以解释其中的变量
    >:一次性输入,保存最后一次输入,原来就又内容的话会被清除
    >>:追加输入
    <:输出
    <<:追加输出
    expr:算术运算
    $?:上一条变量是否执行成功

    更多相关内容
  • Linux shell脚本编写

    千次阅读 2021-09-19 10:58:15
    Linux shell脚本编写 描述 shell脚本是一些linux命令的集合,因为在Linux的shell中运行的,所以称为shell脚本; shell脚本由linux命令、bash shell命令、程序结构控制语句和注释等内容组成; shell脚本的方便之处...

    Linux shell脚本编写

    描述

    shell脚本是一些linux命令的集合,因为在Linux的shell中运行的,所以称为shell脚本;
    shell脚本由linux命令、bash shell命令、程序结构控制语句和注释等内容组成;
    shell脚本的方便之处在于:可以将所有的操作记录于文件,然后直接一步操作调用完成;

    编写规范

    • 编辑器的使用
      在linux系统中,shell脚本通常使用内置的vim编辑器编写;
      也可以在其他的支持shell语言的编辑器中编写后导入Linux系统;

    • 脚本开头(shebang/hashbang)
      在计算领域中,Shebang(也称为 Hashbang)是一个由井号和叹号构成的字符序列#!,其出现在文本文件的第一行的前两个字符。
      在 Shebang 之后,可以有一个或数个空白字符,后接解释器的绝对路径,用于指明执行这个脚本文件的解释器;

      #! /bin/bash
      do smthing...
      
    • 脚本注释
      在shell脚本中,跟在#号后面的内容表示注释,用来对脚本进行注释说明,注释部分不会被执行;
      注释可自成一行,也可以直接跟在脚本命令后面;
      开发脚本时,尽量养成书写注释的习惯,方便别人也方便自己,有利于团队的协作。

    • 编写示例

      [root@OpenWrtEXT:my_script]#cat core_auto_start.sh
      #!/bin/sh
      
      python -m rpd.tps --port 37 &     # 注释:启动TPS服务
      logfilename=master_log_$(date +%Y%m%d%H%M%S)  # 注释:设置log文件名变量
      python -m rpd.rcp.simulator.rcp_master_sim >logfilename 2>&1 &   # 注释:启动服务,并将log信息写入log文件
      
      [root@OpenWrtEXT:my_script]#
      
    • 脚本运行

      • 通过解释器+脚本方式运行
      [root@OpenWrtEXT:my_script]#cat mytest.sh 
      #!/bin/sh
      echo "this is a test shell!!!!"
      logfile_name=master_log_$(date +%Y%m%d%H%M%S)  # create variable of log filename
      echo $logfile_name
      [root@OpenWrtEXT:my_script]#ll | grep my
      \-rw-r--r--    1 root     root           142 Jul 28 11:00 mytest.sh
      [root@OpenWrtEXT:my_script]#/bin/sh mytest.sh 
      this is a test shell!!!!
      master_log_20210728110110
      [root@OpenWrtEXT:my_script]#
      
      • 给脚本增加执行权限直接运行
      [root@OpenWrtEXT:my_script]#ll | grep my
      \-rw-r--r--    1 root     root           142 Jul 28 11:00 mytest.sh
      [root@OpenWrtEXT:my_script]#./mytest.sh    # 未加执行权限时,无法直接运行
      \-ash: ./mytest.sh: Permission denied
      [root@OpenWrtEXT:my_script]#chmod +x mytest.sh
      [root@OpenWrtEXT:my_script]#ll | grep my
      \-rwxr-xr-x    1 root     root           142 Jul 28 11:00 mytest.sh
      [root@OpenWrtEXT:my_script]#./mytest.sh   # 增加执行权限后,可以直接运行
      this is a test shell!!!!
      master_log_20210728110315
      [root@OpenWrtEXT:my_script]#
      
    展开全文
  • Linux shell脚本编写基础
  • linuxShell脚本编写实验7报告.pdf
  • 主要介绍了9个实战及面试常用Shell脚本编写,非常不错,具有一定的收藏价值,需要的朋友可以参考下
  • Linux shell 脚本编写

    万次阅读 多人点赞 2018-01-30 12:24:10
    1、Unix&Linux,GUN,Ubuntu,Red Hat,Fedora。 2、Linux用户管理。 —Root用户,普通用户,用户组。 —useradd,passwd,usermod,finger,sudo(su),groupadd,groups,whoami,who。 3、文件和目录操作。 ...

    知识点回顾:
    1、Unix&Linux,GUN,Ubuntu,Red Hat,Fedora。
    2、Linux用户管理。
    —Root用户,普通用户,用户组。
    —useradd,passwd,usermod,finger,sudo(su),groupadd,groups,whoami,who。
    3、文件和目录操作。
    —文件名和文件拓展名
    —层次的文件结构
    —In linux,Everything is file,if something is not file,it is ?(process)
    —文件类型:普通文件,符号链接文件,目录文件,设备文件等。
    —Touch,vim,cat,ls,pwd,cd,cp,rm,mkdir,rmdir,file。
    —Chmod,umask。
    —改变文件属主:chown。
    —改变文件用户组:chgrp。
    —其他的一些命令:more,less,tail,head,find。
    4、一个编辑器vi(vim)的使用
    —两种模式:编辑模式,命令模式。
    —Vi基本编辑功能:x, dd, i, c.
    —推出vi:q, q!, wq.

    参考资料
    1、鸟哥的linux私房菜:
    http://linux.vbird.org/linux_basic/0320bash.php#bash
    2、IBM shell编程系列:
    http://www.ibm.com/developerworks/cn/linux/shell/
    3、Linux Shell Scripting(详细英文文档) :
    http://bash.cyberciti.biz/guide/Main_Page

    Shell简介
    1、Shell是什么?
    Shell是系统的用户界面,提供了用户和内核进行互操作的一种接口。它接受用户的输入,并将命令传送到内核中去执行。此外,shell也能被系统中其他有效的linux实用程序和应用程序调用。
    这里写图片描述

    2、学习shell有何用途??
    —自动化工具:自动化软件测试等
    —文本处理:sed,awk
    —批处理
    —Unix界有一句名言:“一行shell脚本胜过万行C程序”
    —求职面试的需求:有兴趣去看看阿里,百度,腾讯等公司的招聘要求。只要是面向系统的几乎全部需要熟悉linux操作系统,熟悉shell编程。

    博主这边主要是在Android系统编译打包时要用到这个shell脚本文件,基本上都是用的这个shell脚本,去操作系统文件导入,压缩,copy,move,makedir,权限修改等,所以我们很有必要去了解这个shell程序的编写

    这里写图片描述
    build.makeimage代码片段:

    if [[ ! $SUDING_BT_VERSION -ne 1 ]];then
        echo "suding bt"
        #bin
        cp -vf $AUTOCHIPS_DIR/packages/externalsysapk/SUDINGBT/bin/*  $OUTPUT_SYS/bin
        #app
        cp -vf $AUTOCHIPS_DIR/packages/externalsysapk/SUDINGBT/apk/*  $OUTPUT_SYS/app
    
        #bt tools
        cp -vrf $AUTOCHIPS_DIR/packages/externalsysapk/SUDINGBT/tools/*  $OUTPUT_SYS
    
        #for bt app save the bt power state file
        if [ ! -f $OUTPUT_DIR/data/power_status ];then
            touch $OUTPUT_DIR/data/power_status
            chmod 666 $OUTPUT_DIR/data/power_status
        fi
    
        #rm mtk apk
        rm -rf $OUTPUT_SYS/app/AutoBT.apk
        rm -rf $OUTPUT_SYS/app/AutoBTService.apk
    else
        echo " mtk bt"
        rm -rf $OUTPUT_SYS/bin/blueletd
        rm -rf $OUTPUT_SYS/bin/bt_test
        rm -rf $OUTPUT_SYS/lib/libbluelet.so
        rm -rf $OUTPUT_SYS/lib/libbt_platform.so
        rm -rf $OUTPUT_SYS/bin/serial_rate_to_file
        rm -rf $OUTPUT_SYS/lib/libserialport_bt.so
        rm -rf $OUTPUT_SYS/app/AutoBtService.apk
        rm -rf $OUTPUT_SYS/app/AutoBtClient.apk
        rm -rf $OUTPUT_SYS/app/AutoBtMusic.apk
    fi

    Shell分类:各个shell中内置命令不相同

    Bourne shell(/bin/sh) 
    C shell(/bin/csh)
    Korn shell(/bin/ksh)
    Bourne again shell(/bin/bash)
    Tenex C shell(tcsh)

    Shell中的变量和变量的设定及使用

    1、shell本地变量:本地变量只在本shell中起作用。
    —变量无需声明
    —变量调用:在变量前加 ,echo HOME
    —unset删除变脸赋值
    —有条件命令替换:

    ${variable: -value}
    ${variable:=value}
    ${variable: +value}
    ${variable:?message}

    2、环境变量
    —查看环境变量:env
    —常见环境变量作用(实验作业)
    —export将一个局部变量提供给shell的其他命令使用
    —修改环境变量
    3、特定变量参数

    $#:传递给脚本的参数的个数
    $*:显示所有向脚本传递的参数
    $$:脚本运行的id号
    $!:后台运行的第一个进程的id号
    $?:最后一个命令执行情况,0表示没有错误
    $@:所有参数,每次参数使用””括起来

    Shell输入输出重定向
    重定向是什么?将shell命令的标准输入,输出,错误重定向到指定的文件中。

    这里写图片描述
    stdin(0表示):<, <<
    stdout(1表示):>, >>
    stderr(2表示):2>, 2>>
    /dev/null:黑洞

    Pipe
    Pipe是什么?将一个进程的标准输出连接到另外进程的标准输入。
    这里写图片描述
    Pipe简单应用
    —cut:从文件中的每一行剪切一定量的字符,送到stdout。
    —grep
    —sort,wc,uniq
    —tee –a [file],将管道中的数据写入[file]中,同时将数据写入stdin。
    这里写图片描述

    Shell 编写
    1、打造自己的shell编程环境
    —Shell功能
    —Shell中的变量和变量设定,使用
    —个人环境变量配置
    —Shell输入输出重定向
    —Shell中pipe
    2、第一个shell程序Hello Shell
    —Shell程序结构
    —执行shell程序
    3.Shell的输入输出
    4.Shell控制结构
    if – else
    do while
    for
    5.Shell中的函数
    6.Shell脚本调试

    下面编写shell脚本,了解程序结构
    这里写图片描述
    改变文件属性:sudo chmod +x helloshell.sh
    执行该文件: ./helloshell.sh或者是sh ./helloshell.sh

    这里写图片描述

    标准输出:echo,注意转移字符,\t, \n, \”等。
    这里写图片描述
    标准输入: read,cat
    这里写图片描述

    shell控制结构

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    shell中的函数

    这里写图片描述

    这里写图片描述

    其实这个shell 编程语法表现的很随意,shell程序80%的时间基本上都是用于调试的。

    It bombs with a "syntax error" message, or
    It runs, but does not work as expected (logic error)
    It runs, works as expected, but has nasty side effects (logic bomb)
    

    那么该如何调试?
    1、在任何可能出错的地方使用echo打印变量的值。
    这里写图片描述
    2、使用tee命令在关键点检查数据流
    3、设置shell运行时参数
    sh -n your_script:返回所有的语法错误
    sh -x your_script:显示所有变量的值
    4、使用图形化的调试工具
    http://bashdb.sourceforge.net/
    这里写图片描述
    5、使用assert实现

    #!/bin/bash
    # filename: assert.sh
    
    assert ()                 #  If condition false,
    {                         #+ exit from script with error message.
      E_PARAM_ERR=98
      E_ASSERT_FAILED=99
    
      if [ -z "$2" ]          # Not enough parameters passed.
      then
        return $E_PARAM_ERR   # No damage done.
      fi
    
      lineno=$2
    
      if [ ! $1 ]
      then
        echo "Assertion failed:  \"$1\""
        echo "File \"$0\", line $lineno"
        exit $E_ASSERT_FAILED
      # else
      #   return
      #   and continue executing script.
    fi
    }
    
    
    a=5
    b=4
    condition="$a -lt $b"     # Error message and exit from script.
                              #  Try setting "condition" to something else,
                              #+ and see what happens.
    # assert failure
    assert "$condition" $LINENO
    

    demo点击下载

    另附相关参考资料及教程说明:
    http://www.linuxidc.com/Linux/2013-02/79468.htm
    使用env命令查看系统中的换将变量,并解释变量对应的含义。
    http://linux.vbird.org/linux_basic/0320bash.php
    Shell下的gui(libnotify-bin)编程
    http://blog.mpathirage.com/2009/09/12/using-libnotify-in-ubuntu-9-04/

    展开全文
  • Linux Shell 脚本编写的有关于交互式设置亮度的脚本
  • LinuxShell脚本编写PPT课件.pptx
  • LinuxShell脚本编写PPT学习教案.pptx
  • linuxShell脚本编写实验7报告参照.pdf
  • linux shell脚本编写批处理

    千次阅读 2021-12-15 22:04:41
    今天下午把打包好的镜像文件上传到公司服务器上,想在服务器上导入镜像,玩了会shell挺有意思的,把其中遇到的知识点以及问题列出来总结下。 问题引出 因为上传的镜像tar包很多,一个个使用docker load -i 显得很蠢...

    今天下午把打包好的镜像文件上传到公司服务器上,想在服务器上导入镜像,玩了会shell挺有意思的,把其中遇到的知识点以及问题列出来总结下。

    问题引出

    因为上传的镜像tar包很多,一个个使用docker load -i 显得很蠢,就想玩玩shell,在网上查了一下使用shell获取文件名的方法:

    cur_dir="./"
    
    for file_name in `ls ${cur_dir}`
            do
            if [ "${file_name##*.}"x = "tar"x ]; then
                tmp_file=`basename ${file_name}`
                docker load -i ${tmp_file}
            fi
            done
    

    上面代码把知识点给到大家:

    • for循环结构
      这个还好理解,可以把他当成python代码,for里面的do done相当于for的代码体
    • ``意思是漂里面是可执行命令,等同于$()
    • ${}这个意思是使用shell中的变量,如果只是变量读取可以省略这个{}直接$
    • if使用结构:if [ state ] ; then fi
      这里注意一下:两个中括号中间必须有空格,包括if和中括号之间也要有!else结构:if [ state ]; then xxx elif [ state ] then xxx else fi
    • 中括号中间的state如果需要判等使用=单等号。
    • shell的单引号和双引号是有区别的!单引号不会解析其中的表达式,就如这个"${file_name##*.}" 这里如果使用单等号那么代表的就是纯纯的字符串。
    • "${file_name##*.}"x = "tar"x这个x没有特殊含义,仅是为了避免出现前面的字符串为空的情况下会报错,可以替换成任意字符。
    • "${file_name##*.}"x = "tar"x 中的 ##是字符串截取, .是截取方式,在我的代码中表示截取后缀, * 是舍弃位置,在截取方式前面表示舍弃.前面的字符串。有这几种类似符号:
      # 标记位为从前到后第一个匹配的位置
      ## 标记位为从前到后最后一个匹配的位置
      % 标记位为从后到前第一个匹配的位置
      %% 标记位为从后到前最后一个匹配的位置

    优化

    load成功之后,留下了一堆的tar包,为了给用户更好的体验给到一个交互shell:询问用户是否删除tar包

    cur_dir="./"
    
    for file_name in `ls ${cur_dir}`
            do
            if [ "${file_name##*.}"x = "tar"x ]; then
                tmp_file=`basename ${file_name}`
                docker load -i ${tmp_file}
            fi
            done
    
    echo "remove tars?(y/n)"
    read input
    if [ "${input}"x = "y"x ]; then
        for file_name in `ls ${cur_dir}`
            do
            if [ "${file_name##*.}"x = "tar"x ]; then
                tmp_file=`basename ${file_name}`
                rm -f ${file_name}
            fi
            done
        echo "success"
    fi
    

    知识点㕛来了:

    • read读取shell输入字符串,并且存入input中。同时要注意下,我们这里的输入可能直接敲一个回车,那么这里的input就是null,所以也需要使用一个占位字符,避免null比较。

    聪明的人应该可以看出代码有很大的重复程度,而且时间复杂度很高,这段判断文件后缀是否为tar的时间复杂度为O(2 * n * m),n是文件数量,m是文件名长度。

    害怎么这么蠢呢 突然想到ls可以加个管道呀

    优化:使用变量名存储后缀,这样不用多次修改后缀,便于测试用。

    cur_dir="./"
    
    suffix="txt"
    
    for file_name in `ls ${cur_dir} | grep "${suffix}"`
            do
                tmp_file=`basename ${file_name}`
                echo $tmp_file
            done
    
    echo "remove tars?(y/n)"
    read input
    if [ "${input}"x = "y"x ]; then
        for file_name in `ls ${cur_dir} | grep "$suffix"`
            do
            echo $file_name
            # rm -f $file_name
            done
        echo "success"
    fi
    

    搞定!好家伙,这个东西我竟然玩了两个小时,把正事都给忘了QwQ…
    我还写了份用数组存储文件名的shell后来被覆盖不见了… 等有时间补上,或者大佬们在评论区里实现一下。

    展开全文
  • Linux Shell脚本编写基础
  • Linux编写Shell脚本

    千次阅读 2021-07-22 17:30:16
    Shell脚本编写规范 Shell 中的变量 变量的算术运算 双小括号 (()) 数值运算命令的用法 let 运算命令的用法 expr 命令的用法 br 命令的用法 $[] 符号的运算示例 Shell脚本的条件测试 几种条件测试语句 文件...
  • Shell脚本编写实战

    2021-06-09 11:57:26
    根据实际的案例讲解怎么编写Shell脚本,在什么场景下编写为讲解导向。课程内容如下:1.编写Shell脚本注意事项与编写打印字体颜色函数2.批量创建用户3.监控主机存活状态4.监控CPU、内存、硬盘和网卡流量利用率5.监控...
  • 资源名称:Linux Shell脚本学习基础视频资源目录:【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_...
  • Linuxshell脚本编写基础

    2013-08-29 02:21:07
    Linuxshell脚本编写基础 讲解linux 脚本的编写 适合自学Linux的同学
  • 本篇文章,我们可以通过写shell脚本来执行数据库操作。 配置文件 创建 test_sql.properties 作为shell脚本的外部配置参数修改: [andya@liunx01 sql_sh]$ vim test_sql.properties # set parameters start # 1 db ...
  • 完全使用Linux shell脚本语言编写的一个简单的作业管理系统
  • 六、LinuxShell脚本编程

    千次阅读 2021-12-04 09:15:13
    第六章:shell编程 1.1 shell的概念介绍 1.1.1 命令解释器 Shell是命令解释器(command interpreter),是Unix操作系统的用户接口,程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核...
  • 主要介绍了linux环境下编写shell脚本实现启动停止tomcat服务的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 通常,当人们提到“shell脚本语言”时,浮现在他们脑海中是bash,ksh,sh或者其它相类似的linux/unix脚本语言。脚本语言是与计算机交流的另外一种途径。使用图形化窗口界面(不管是windows还是linux都无所谓)用户...
  • 用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作。在Linux GUI日益完善的今天,在系统管理等领域,Shell编程仍然起着不可忽视的作用。深入地了解和熟练地掌握Shell编程,是每一个Linux用户的...
  • linux shell
  • Linuxshell脚本编程

    千次阅读 2022-03-13 23:57:52
    01 Linux 系统环境 文件系统结构 / 虚拟目录的根目录。通常不会在这里存储文件 /bin 二进制目录,存放许多用户级的GNU工具 /boot 启动目录,存放启动文件 /dev 设备目录,Linux在这里创建设备节点 /etc 系统...
  • Linux Shell脚本教程:30分钟玩转Shell脚本编程 _

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,135
精华内容 44,454
关键字:

linuxshell脚本编写