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

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

脚本执行

  1. chmod 755 my.sh

    ./my.sh

  2. bash my.sh

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

yum update -y dos2unix

history

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

alias

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

命令执行的顺序

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

快捷键

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

标准输入输出

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

wc

wc -c my.txt   			#显示文本的字符数
wc -l my.txt #显示文本的行数
wc -w my.txt #显示文本的单词数 wc -c <my.txt #显示文本的字符数
wc -l < my.txt #显示文本的行数
wc < my.txt #显示文本的单词数,字符数,行数 wc <<hello
ad
dsd
decho
hello

多命令执行

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

管道符

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

grep

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

通配符


*
[]
[a-g]
[^0-5]

Bash中其他特殊符号

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

四种变量

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

read

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

三种运算方式

aa=11
bb=22
declare -i cc=$aa+$bb # -i 声明为整数类型,-p 显示被声明的类型,-x 声明为环境变量
echo $cc aa=11
bb=22
dd=$(expr $aa + $bb) #注意空格
echo $dd aa=11
bb=22
ff=$(( $aa+$bb )) #推荐
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. 将文件夹上传到FTP服务器,遍历上传,,,文件夹不能直接上传到FTP服务器上。。。

    <? $ftp_ip = "FTP"; $ftp_user = "user"; $ftp_pwd = "password"; $con ...

  2. js 函数定义的方式

    js 函数定义的方式 一.总结 一句话总结: 最常见就下面三种 最常见:function func1([参数]){/*函数体*/} 将匿名函数赋值给变量:var func2=function([参数] ...

  3. 【Linux】GDB用法详解(5小时快速教程)

    GDB是一个强大的命令行调试工具.虽然X Window提供了GDB的图形版DDD,但是我仍然更钟爱在命令行模式下使用GDB.大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本. UNIX下的软 ...

  4. 全面解读PHP-数据库缓存

    一.什么是数据库缓存? 1.定义 mysql等一些常见的关系型数据库的数据都存储在磁盘当中,在高并发场景下,业务应用对mysql产生的增删改查的操作会造成巨大的IO开销和查询压力,这无疑对数据库和服务 ...

  5. C++ Vector实践

    实践如下: #include <iostream> #include <vector> #include <typeinfo> using namespace st ...

  6. Android Studio在Make Project时下载Grandle特别慢

    SDK下载完成了,建个工程, 又蒙了: Server returned HTTP response code: 502 for URL: https://services.gradle.org/dis ...

  7. Nova rebuild for boot from volume issue

    目录 文章目录 目录 Nova boot from volume Rebuild Instance Rebuild for boot from volume Nova boot from volume ...

  8. NOIP2013提高问题求解T2(关于递推与递归)

    同步发表于我的洛谷博客. NOIP2013提高问题求解2: 现有一只青蛙,初始时在n号荷叶上.当它某一时刻在k号荷叶上时,下一时刻将等概率地随机跳到1,2,--,k号荷叶之一上,直到跳到第1号荷叶为止 ...

  9. JWT的实现原理

    前言最近在做一个python项目的改造,将python项目重构为java项目,过程中遇到了这个知识点,觉得这个蛮实用的,所以下班后回来趁热打铁写下这篇总结,希望后面的人能够有所借鉴,少走弯路. 一.优 ...

  10. HDU2196 Computer【换根dp】

    题目传送门 题意: 给定一个$N$个点的树,第$i$条边的长度是$A_i$,求每个点到其他所有点的最长距离.数据范围:$n ≤ 10000$,$A_i ≤ 10_9$ 分析 首先,从随便哪个节点($1 ...