Linux的Shell种类众多,这里我们关注的重点是Bash。

基本语法

  • 环境变量$PATH
  • IO重定向: 
    • <改变标准输入

      • 如:tr -d '\r' < dos-file.txt
    • >改变标准输出 
      • 如:tr -d '\r' < dos-file.txt > UNIX-file.txt(如果>的目的文件不存在,将自动创建,若存在,将覆盖原文件)
    • >>附加到文件(文件末尾追加) 
      • 若文件不存在,则自动创建,若存在,则在文件末尾追加
    • |建立管道 
      • 前一个program的输出作为后一个program的输入(program1 | program2),如:ls | grep a
  • 特殊文件:/dev/null/dev/tty

    • /dev/tty:输入密码时,默认不打印输入的密码到终端,例如:(-echo 用来关闭打印输入,echo打开)

          printf "Enter new password: "
      stty -echo
      read pass < /dev/tty
      printf "Enter again: "
      read pass2 < /dev/tty
      stty echo
      ...

常用命令:

  • who:查询系统的登陆用户
  • cat > 文件名 :将后面的输入信息重定向到文件中,以 ^D 结束
  • tr:转换字符 
    • -d:删除source-char-list所列举的字符,如:tr -d '\r' < dos-file.txt | sort > UNIX-file.txt,将dos-file.txt中的回车符全部删掉,再排好序重定向到UNIX-file.txt文件中
  • sh (执行一个脚本) 
    • -x显示脚本中的每个命令,以+开头,可以在脚本中打开追踪功能, set -x,用set +x关闭追踪
  • grep
  • sed
  • cut
  • awk
  • sort
  • uniq :(去重)
  • head -n n 查看前n行
  • tail -n n 查看后n行

  • umask

命令使用注意事项

  • -开头表示选项,以--开头表示长选项
  • 多条命令写在一行,以;分隔

脚本的语法说明:

    1. #! 脚本解释器路径开头,如:#! /bin/sh
    2. 变量 
      • 命名:字母或下划线开头,后面可以是字母数字,下划线
      • 赋值:变量名=值(注意等号前后不能有任何空格,变量值之间有空格时,需要用引号括起来),单行多次赋值,之间用空格分隔
      • 使用变量:以$变量名
      • 输出: 
        • echo

          • echo 参数(参数以空格分隔)
        • printf 
          • 不会自动换行,需要换行,需在末尾加上\n
          • 例句:printf "the first program always print %s,%s" hello world (\d表示十进制整数)
    3. 再shell脚本中访问shell脚本的参数 
      • 读取第n个参数,通过$n读取,若n的数值大于9,则需用大括号括起来,如${10},读取第10个参数

利用vi等文本编辑器编写Shell脚本的格式是固定的,如下:

1 #!/bin/sh
2 #comments
3 Your commands go here
首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程 序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第 一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上",这个符号表明下一行与此行会合并为同一行。文件名后缀sh表明这是一个Bash脚本文件。
执行脚本的时候,要先将脚本文件的属性改为可执行的,然后再执行:
#将属性改为可执行
chmod +x filename.sh
 
#执行shell文件
./filename.sh
 
简单的hello world例子(test.sh):

注:“=”号左右无空格

 相关的变量命令
env用于显示用户环境区中的变量及其取值;set用于显示本地数据区和用户环境区中的变量及其取值;unset用于删除指定变量当前的取值,该值将被指定为NULL;export命令用于将本地数据区中的变量转移到用户环境区。
实例:

#!/bin/sh
#exist test.sh?
if ls -l test.sh; then
  ./test.sh
  if [ "$1" = "me" ]; then
    printf "I like you\n"
    printf "You are the best!\n"
  else
    echo "You are ugly"
  fi
else
  echo "return false"
fi

输出结果:

不断更新中。。。。

shell脚本编程入门的更多相关文章

  1. 08 bash特性--shell脚本编程入门

    shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...

  2. Shell脚本编程入门到放弃

    1 区分大小写 UNIX是区分大小写的,因此shell脚本也是区分大小写的 2 特殊字符 UNIX的某些字符都有特殊的意义或功能,如果它们不以其特殊的意义使用必须要进行转义(escaped). 为了转 ...

  3. Shell脚本编程入门(一) 分类: 学习笔记 linux ubuntu 2015-07-09 21:06 29人阅读 评论(0) 收藏

    最近在学shell,记录一下. if语句的使用: 1.判断两个参数大小 #!/bin/sh #a test about if statement a=10 b=20 if [ $a -eq $b ]; ...

  4. Shell脚本编程入门(一)

    最近在学shell,记录一下. if语句的使用: 1.判断两个参数大小 #!/bin/sh #a test about if statement a=10 b=20 if [ $a -eq $b ]; ...

  5. 5个Shell脚本编程入门练习例子

    例子一:绘制特殊图形 复制代码代码如下: #!/bin/bash MAX_NO=0 echo -n "Enter Number between (5 to 9) : " read ...

  6. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  7. Shell脚本编程学习入门 02

    Shell脚本编程学习入门是本文要介绍的内容,我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):   #! ...

  8. Shell脚本编程学习入门 01

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  9. Shell脚本编程30分钟入门(小结)(转)

    原文链接https://www.jb51.net/article/161028.htm 什么是Shell脚本 Shell脚本(英语:Shell script),又称Shell命令稿.程序化脚本,是一种 ...

随机推荐

  1. git创建项目的两种方式

    场景1: 将本地内容推送给远程库 1.创建版本库 git init 将此目录转换为git可管理的仓库 git config --global user.name "xx" 或 gi ...

  2. 用js实现图片(小球)在屏幕上上下左右移动

    <html> <head> <title>Document</title> </head> <body style="bac ...

  3. 分享知识-快乐自己:SpringBoot结合使用拦截器(判断是否用户是否已登陆)

    所有的开发之中拦截器一定是一个必须要使用的功能,利用拦截器可以更加有效的实现数据的验证处理,而且最为幸运的是在SpringBoot之中所使用的拦截器与Spring中的拦截器完全一样. 基础拦截器操作: ...

  4. B1/B2签证的有效期——对于B1/B2签证,停留期最长不超过183天

    一.关于签证有效期首先我们要知道当我们历经困难从签证官手里拿到自己的签证的时候,签证上面有个时间这个我们叫做签证有效期.B1/B2一般是一年多次往返的,这个只跟你申请的签证类型有关,与你填表的时候写的 ...

  5. 【Codeforces】894E.Ralph and Mushrooms Tarjan缩点+DP

    题意 给定$n$个点$m$条边有向图及边权$w$,第$i$次经过一条边边权为$w-1-2.-..-i$,$w\ge 0$给定起点$s$问从起点出发最多能够得到权和,某条边可重复经过 有向图能够重复经过 ...

  6. ActorModel 概念翻译

    学习 skynet 时初次接触到 ActorModel 模型,始终觉得有必要从宏观上了解 ActorModel 的概念,所以以维基上这篇文章为参考,把文章中的部分内容翻译成中文,好让自己体会一下 Ac ...

  7. PG替换字段中的回车与换行

    REPLACE(filed, CHR(10), '') //替换换行符 REPLACE(filed, CHR(13), '') //替换回车符

  8. C/C++ 混合编程

    [面试] C/C++ 语法(五) -- extern 1. C 调用 C++ 开发的DLL库 C和C++混合编程(__cplusplus 与 external "c" 的使用) # ...

  9. <十八>UML核心视图动态视图之协作图

    一:协作图 --->描述了对象间交互的一种模式.它通过对象之间的连接和它们相互发送的消息来显示参与交互的对象 --->协作图可以有对象和主角实例,以及描述它们之间关系和交互的连接和消息.通 ...

  10. mongodb入门-关系型RDMS数据库对比及适用场景

    引言 最近工作接触到了mongodb数据库,记录下个人对其的理解和使用情况.虽然mongodb 出来的时间已经不短,但是相对mysql mssql oracle 这样传统的关系型数据库来说还是比较年轻 ...