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

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 "abc"        				#输出ac
echo -e "e[1;31m abcd e[0m"      	#输出红色的abcd,30m黑色,31m红色,32m绿色,33m黄色等
a  发出警告声;
  删除前一个字符;
c  最后不加上换行符号;
f  换页;

  换行且光标移至行首;

  回车;
	  插入tab,水平制表符;
v  垂直制表符;
\  插入字符;
nnn    插入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@	 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

运算符

这里写图片描述

判断测试表达式

这里写图片描述

原文地址:https://www.cnblogs.com/onegoal/p/7244825.html