shell简介

分为两种c shell 和b shell

b shell:sh、ksh、Bash、psh、zsh; (Bash和sh兼容,linux基本shell是Bash)

c shell:csh、tcsh; (语言风格类似C语言,所以得名c shell)

查看系统shell :cat /etc/shells

echo

  1. echo -e "ab\bc" #输出ac
  2. echo -e "\e[1;31m abcd \e[0m" #输出红色的abcd,30m黑色,31m红色,32m绿色,33m黄色等
  1. \a 发出警告声;
  2. \b 删除前一个字符;
  3. \c 最后不加上换行符号;
  4. \f 换页;
  5. \n 换行且光标移至行首;
  6. \r 回车;
  7. \t 插入tab,水平制表符;
  8. \v 垂直制表符;
  9. \\ 插入\字符;
  10. \0nnn 插入nnn(八进制)所代表的ASCII字符;
  11. \xhh 插入hh(十六进制)所代表的ASCII字符;

脚本执行

  1. chmod 755 my.sh

    ./my.sh

  2. bash my.sh

如果是dos过来的脚本,换行符和linux中不一样不能直接执行,使用dos2unix命令

yum update -y dos2unix

history

  1. history -c #清楚历史命令
  2. history -w #将历史强行写入.bash_history 而不是等登出后
  3. !n #执行history 第n个
  4. !! #执行上一条命令
  5. !字符串开头 #执行最近的字符串想同的命令
  6. vi /etc/profile #修改保存历史的默认条数

alias

  1. alias vi="vim"
  2. unalias vi
  3. vi /root/.bashrc #使别名永久生效

命令执行的顺序

  1. 第一顺序为绝对路径或相对路径执行的命令
  2. 别名
  3. Bash内部命令
  4. 按照环境变量$PATH中定义的目录找到第一条命令

快捷键

  1. ctrl+a #将光标移动到命令开头
  2. ctrl+c #终止命令
  3. ctrl+z #暂停命令,并且放入后台
  4. ctrl+u #剪切光标前的命令部分
  5. ctrl+k #剪切光标后的命令部分
  6. ctrl+y #粘帖命令
  7. ctrl+l #清屏

标准输入输出

  1. /dev/stdin #标准输入的设备文件名,文件描述符0
  2. /dev/stdout #标准输出的设备文件名,文件描述符1
  3. /dev/stderr #标准错误的设备文件名,文件描述符2
  4. ls > my.txt #覆盖方式将ls命令结果标准输入到my.txt,出错则不会写入文件,直接输出在屏幕中
  5. ls aa 2>> my.txt #因为没有aa文件,追加方式将错误追加到my.txt,有aa文件则对my.txt无任何影响。
  6. 命令>文件 2>&1 #覆盖方式将正确输出和错误输出都保存在同一个文件中
  7. 命令 &>>文件 #追加方式将正确输出和错误输出都保存在同一个文件中
  8. 命令>>文件1 2>>文件2 #正确输出追加到文件1,错误输出追加到文件2

wc

  1. wc -c my.txt #显示文本的字符数
  2. wc -l my.txt #显示文本的行数
  3. wc -w my.txt #显示文本的单词数
  4. wc -c <my.txt #显示文本的字符数
  5. wc -l < my.txt #显示文本的行数
  6. wc < my.txt #显示文本的单词数,字符数,行数
  7. wc <<hello
  8. ad
  9. dsd
  10. decho
  11. hello

多命令执行

  1. ; #命令直接没有任何关系
  2. && #前面命令无错,再执行后面的,否则不执行后面的命令
  3. || #前面命令错误,再执行后面的,否则不执行后面的命令
  4. ls /root/hehe || echo 'no'
  5. ls /etc/services && ll
  6. 命令 && echo yes || echo no

管道符

  1. 命令1 | 命令2 #命令1的正确输出作为命令2的操作对象

grep

  1. grep 'ss' /etc/services
  2. grep -i 'ss' /etc/services #忽略大小写
  3. grep -n 'ss' /etc/services #显示行号
  4. grep -v 'ss' /etc/services #查找不存在ss的行

通配符


  1. *
  2. []
  3. [a-g]
  4. [^0-5]

Bash中其他特殊符号

  1. '' #在单引号中所有特殊符号都没有特殊含义
  2. "" #在双引号中所有特殊符号都没有特殊含义,除了$、`、\
  3. `` #反引号,反引号括起来的是系统命令,在Bash中会先执行它,同$()。不推荐,容易看错
  4. $() #引用系统命令
  5. #
  6. $
  7. \

四种变量

  1. 用户自定义变量 #Bash中,变量默认类型都是字符型,若要进行数值运算,必须指定为数值型。
  2. #变量定义用等号连接,等号两侧不能有空格
  3. #变量值中可以用反斜杠转义
  4. #只在当前shell中生效
  5. #name=12
  6. #echo $name
  7. #查看所有变量: set
  8. 环境变量 #尽量大写,以便区分
  9. #当前shell和所有子shell中生效,这是指的临时环境变量
  10. #如果将环境变量写入配置文件,则在所有的shell中生效。
  11. #临时:
  12. #声明变量: export 变量名=变量值
  13. #查询变量: env
  14. #删除变量: unset 变量名
  15. #进入子shell: bash
  16. #退出当前shell: exit
  17. #查看shell树形结构: pstree
  18. #PS1系统提示符:可以算是系统变量,但是env并不能查看到。
  19. #设置PS1: PS1='[\u@\t \w]\$ '
  20. #设置临时环境变量 PATH="$PATH":/root
  21. 位置参数变量 #预定义变量中的一种,因为多,所有单独列出。固定的,是用来向脚本中传递参数或数据的。
  22. #$n $0表示命令本身或者文件名,$1,第一个参数,$2.第二个参数。。。
  23. #$* 把所有参数看成一个整体
  24. #$@ 类似$*,但是把每个参数区分对待
  25. #$# 参数个数
  26. 预定义变量 #$? 最后一次命令的返回状态,0表示正确,非0表示上一个命令执行不正确。
  27. #$$ 当前进程的进程号PID
  28. #$! 后台运行的最后一个进程的进程号PID

read

  1. read -s -t 30 -n 3 -p "input a number" yournumber #-s隐藏输入的数据,-t秒数,-p提示,-n数字。

三种运算方式

  1. aa=11
  2. bb=22
  3. declare -i cc=$aa+$bb # -i 声明为整数类型,-p 显示被声明的类型,-x 声明为环境变量
  4. echo $cc
  5. aa=11
  6. bb=22
  7. dd=$(expr $aa + $bb) #注意空格
  8. echo $dd
  9. aa=11
  10. bb=22
  11. ff=$(( $aa+$bb )) #推荐
  12. echo $ff

运算符

判断测试表达式

Linux学习--第十天--bash脚本、用户自定义变量、环境变量、位置参数变量、预定义变量、标准输入输出、wc、history、dd、PS1的更多相关文章

  1. Linux学习之十四、管线命令

    Linux学习之十四.管线命令 地址:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_6.php

  2. [Shell]Bash变量:自定义变量 & 环境变量 & 位置参数变量 & 预定义变量

    --------------------------------------------------------------------------------- 变量是计算机内存的单元,其中存放的值 ...

  3. Linux Shell基础 位置参数变量、预定义变量

    位置参数变量 在 Linux 的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数.其中,$0 代表命令行本身,$1 代表第 1 个参数,$2 代表第 2 个参数 ...

  4. PHP学习笔记1.2——预定义变量参考

    预定义变量和用户自定义变量在使用上没有区别,大多数预定义变量的执行结果都是服务器的相关信息(如:版本号.路径.错误参数等),所以我们很少将其用于网站前台开发,如果被别有用心得人知道了后,会严重威胁服务 ...

  5. 40 VSCode下.json文件的编写——(1) linux/g++ (2).json中参数与预定义变量的意义解释

    0 引言 转入linux/VSCode编程之后,迫切了解到有必有较为系统地学习一下VSCode中相关配置文件的写法.下面将分为 linux/g++编译指令..json文件关键词/替换变量的意义.编译链 ...

  6. Shell脚本_位置参数和预定义参数

    一.位置参数变量   1.输出两个输入参数之和 l1.sh 1 2 3 4 5 6 7 8 9 #!/bin/bash   num1=$1 num2=$2 sum=$((num1+num2))   # ...

  7. Linux学习Day6:编写Shell脚本

    Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...

  8. Linux学习之十六、文件的格式化与相关处理

    原文地址:http://vbird.dic.ksu.edu.tw/linux_basic/0330regularex_4.php 文件的格式化与相关处理 接下来让我们来将文件进行一些简单的编排吧!底下 ...

  9. Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

    阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 ...

随机推荐

  1. ActiveMQ配置文档

    本文介绍一对一.一对多.持久化.非持久化消息配置方式 一.创建项目 导入jar 二.创建MQ.xml <!-- 配置JMS连接工厂 --> <bean id="connec ...

  2. 全面解读php-常量及数据类型

    本文主要讲解字符串的定义方式,数据类型和常量的相关内容. 一.字符串的定义方式 1.字符串的定义方式除了单双引号外,还有一种叫 heredoc 和 newdoc  在我们需要定义很长一段儿字符串的时候 ...

  3. DP练习题——洛谷P1970花匠

    目录 题目描述: 输入输出格式: 输入格式: 输出格式: 输入输出样例: 输入样例: 输出样例: 题目分析: 解法一: 解法二: 结语: 题目描述: 洛谷\(P1970\) 花匠栋栋种了一排花,每株花 ...

  4. leetcode 41缺失的第一个正数

    time O(n) space O(1) class Solution { public: int firstMissingPositive(vector<int>& nums) ...

  5. c++中字符输入函数cin.getline在输入char与string时的不同

    cin.getline在输入char时: using namespace std; ; char name[ArSize]; char dessert[ArSize]; cout << & ...

  6. Mimikatz 攻防杂谈

    前几天看到了老外一篇讲 mimikatz 防御的文章,感觉行文思路还不错,但是内容稍有不足,国内也有一篇翻译,但是只是照着错误翻译的,所以就萌生了把那篇优秀文章,翻译复现,并加入其它一些内容,本文只是 ...

  7. 使用boost库获取文件夹下所有文件名字

    最近整理项目发现一个曾经找了好久的有用的代码片段,就是获取文件夹下所有文件的名字,和当前文件的绝对路径. 记录一下. 使用的是boost库, #include <boost/filesystem ...

  8. 借助marquee实现弹幕效果

    HTML标签marquee实现滚动效果 .基于此,实现简易版 弹幕:  HTML <div class="right_liuyan"> <marquee id=& ...

  9. 【VS开发】修改MainFrame窗口名称1

    在VS2010下新建一个MFC的多文档应用程序,程序默认的标题是"文档名-工程名".图标默认的是写着MFC的三个方块.但在很多软件中都不是使用的默认设置,开发者们都将标题和图标改过 ...

  10. python 并发编程 基于gevent模块 协程池 实现并发的套接字通信

    基于协程池 实现并发的套接字通信 客户端: from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('12 ...