菜单
本页目录

16 shell基础

image-20221220141435985

shell:命令解释器,脚本语言,编译工具(边执行、边编译)

配置文件位置:
		七版本:		/etc/shells
		六版本:		/etc/shell

一 echo [选项] "内容"

 		-e				#可以加特殊字符
 		-n				#输出后,下次命令不换行
[root@localhost ~]# echo -n "yq"
yq[root@localhost ~]# 

-e "内容中可有"

image-20221220141450622

##   \e[数字m    调颜色

[root@localhost ~]# cat /root/test2.sh 
#!/bin/bash
echo -e "\t\t\e[1;5;31myq\e[0m\t\t\t\e[1;5;32myq\e[0m"
echo -e "\t\e[1;5;33myq\e[0m\t\t\e[1;5;35m   yq\e[0m\t\t\t\e[1;5;34myq\e[0m"
echo -e "\t\e[1;5;33myq\e[0m\t\t\t\t\t\e[1;5;34myq\e[0m"
echo -e "\t\e[1;5;33myq\e[0m\t\t\t\t\t\e[1;5;34myq\e[0m"
echo -e "\t\t\e[1;5;36myq\e[0m\t\t\t\e[1;5;31myq\e[0m\t"
echo -e "\t\t\t\e[1;5;32myq\e[0m\t\e[1;5;33myq\e[0m\t\t"
[root@localhost ~]# /root/test2.sh 
		yq			yq
	yq		   yq			yq
	yq					yq
	yq					yq
		yq			yq	
			yq	yq		

二 脚本执行方式 文件以: .sh 结尾

(1)

[root@localhost ~]# vim /root/test4.sh

#!/bin/bash
echo "hello"
1)		chmod		+x			文件,sh			
				绝对路径、相对路径执行			   #需要可执行权限、在子shell中执行
2)		bash		 文件.sh					#无需可执行权限、在子shell中执行
3)		source			文件.sh				#无需可执行权限、在当前shell中执行
				.	文件.sh 					 #无需可执行权限、在当前shell中执行

(2) EOF顶行写即结束

[root@localhost ~]# vim /root/test5.sh 

#!/bin/bash
cat << EOF
yqyqyqyqyq
EOF

#重定向写入文件,没有执行结果
[root@localhost ~]# vim /root/test5.sh 

#!/bin/bash
cat << EOF > /root/yq.txt
yqyqyqyqyq
EOF

三 bash主要功能

1 history

	.bash_history				#保存用户执行的历史命令,用户退出后,内存保存到文件里
	history		-w				#覆盖式保存历史命令(文件里的)
	history		-c				#清空历史命令(内存里的)
	>./.bash_history			#清空历史命令(文件里的)

2 tab 补全

3 alias

例如:		ls	=	'ls	--color=auto'
	\			 #转义符
	\命令			#取消别名执行命令


命令执行顺序:
			1)	绝对路径
			2)	别名	alias
			3)	内部命令,内嵌
			4)	$PATH	环境变量(hash表中)
[root@localhost ~]# echo $PATH			#查看所有环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

hash表 #记录命令次数最大的几条

[root@localhost ~]# hash
命中	命令
   5	/usr/bin/grep
   1	/usr/bin/bash
   3	/usr/bin/chmod
  14	/usr/bin/vim
  11	/usr/bin/cat
   1	/usr/bin/touch
   2	/usr/bin/tee
   1	/usr/bin/yum
  34	/usr/bin/vi
   1	/usr/bin/sz
   9	/usr/bin/ls
#命令次数			命令


		hash  -p  /bin/touch  mkdir			#添加缓存记录,指定/bin/touch为mkdir命令(一般不用)
		hash  -r							#清空hash缓存记录

4 bash常用快捷键

image-20221220141532284

5 输入输出重定向

image-20221220141543022

1)输出重定向 >

(1)正确错误重定向(用于正确、错误日志保存到不同位置)(>覆盖式 >>追加式)

			正确命令		>文件
			错误命令		2>文件
			命令			&>文件							#正确、错误都覆盖式到文件
			命令			>正确文件		2>错误文件			#正确的到正确文件、错误的到错误文件
												;		表示两个命令连接,无论前面命令是否成功都执行后面命令		
												&& 	表示前面命令执行成功后则执行后面命令
												|		表示将命令1的标准输出作为命令2的标准输入
[root@localhost ~]# ls /boot/ > ./right.txt ; cat ./right.txt 	#正确执行命令结果到正确文件,并查看文件内容		
config-3.10.0-957.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-51b463e7803f477d9f46aa6163e1f85e.img
initramfs-3.10.0-957.el7.x86_64.img
symvers-3.10.0-957.el7.x86_64.gz
System.map-3.10.0-957.el7.x86_64
vmlinuz-0-rescue-51b463e7803f477d9f46aa6163e1f85e
vmlinuz-3.10.0-957.el7.x86_64
[root@localhost ~]# lasd /boot/ 2> ./err.txt  ;cat ./err.txt 		#错误执行命令到错误文件,并查看文件内容
-bash: lasd: 未找到命令
[root@localhost ~]# ls /boot/ &> ./all.txt  ;cat ./all.txt 			#无论正确、错误命令都到文件,并查看内容
config-3.10.0-957.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-51b463e7803f477d9f46aa6163e1f85e.img
initramfs-3.10.0-957.el7.x86_64.img
symvers-3.10.0-957.el7.x86_64.gz
System.map-3.10.0-957.el7.x86_64
vmlinuz-0-rescue-51b463e7803f477d9f46aa6163e1f85e
vmlinuz-3.10.0-957.el7.x86_64
[root@localhost ~]# lasds /boot/ &> ./all.txt  ;cat ./all.txt 
-bash: lasds: 未找到命令
[root@localhost ~]# ls /boot/ >./right.txt 2>err.txt  ;cat ./right.txt ;cat ./err.txt 	#正确的到正确、错误的到错误,并查看文件
config-3.10.0-957.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-51b463e7803f477d9f46aa6163e1f85e.img
initramfs-3.10.0-957.el7.x86_64.img
symvers-3.10.0-957.el7.x86_64.gz
System.map-3.10.0-957.el7.x86_64
vmlinuz-0-rescue-51b463e7803f477d9f46aa6163e1f85e
vmlinuz-3.10.0-957.el7.x86_64
[root@localhost ~]# lass /boot/ >./right.txt 2>err.txt  ;cat ./right.txt ;cat ./err.txt 
-bash: lass: 未找到命令

(2)tee # 读取标准输入数据,并将内容输出到文件,命令仍然显示结果 (覆盖式)

## tee		-a		#追加式			类似:	>>

[root@localhost ~]# df -h |tee ./all.txt 					#覆盖式
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        20G  1.3G   18G    7% /
devtmpfs        476M     0  476M    0% /dev
tmpfs           487M     0  487M    0% /dev/shm
tmpfs           487M  7.7M  479M    2% /run
tmpfs           487M     0  487M    0% /sys/fs/cgroup
/dev/sda1       509M  120M  389M   24% /boot
tmpfs            98M     0   98M    0% /run/user/0
/dev/sr0        4.3G  4.3G     0  100% /mnt
[root@localhost ~]# ls /root/ | tee -a ./all.txt 			#追加式
all.txt
anaconda-ks.cfg
df -h
err.txt
ls
right.txt
test1.sh
test2.sh
test3.sh
test4.sh
test5.sh
wuziqi
ya.txt
yq
[root@localhost ~]# cat ./all.txt 
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        20G  1.3G   18G    7% /
devtmpfs        476M     0  476M    0% /dev
tmpfs           487M     0  487M    0% /dev/shm
tmpfs           487M  7.7M  479M    2% /run
tmpfs           487M     0  487M    0% /sys/fs/cgroup
/dev/sda1       509M  120M  389M   24% /boot
tmpfs            98M     0   98M    0% /run/user/0
/dev/sr0        4.3G  4.3G     0  100% /mnt
all.txt
anaconda-ks.cfg
df -h
err.txt
ls
right.txt
test1.sh
test2.sh
test3.sh
test4.sh
test5.sh
wuziqi
ya.txt
yq
2)输入重定向 <

(文件内容到命令) wc、at

wc		文件				#显示文件内容的		行数、空格数、字符数
wc		-c		文件		#只显示字符数,名字
wc		-l		文件		#只显示行数,名字
wc		-w		文件		#只显示词数(空格数),名字
[root@localhost ~]# wc /etc/fstab 
 11  54 501 /etc/fstab
[root@localhost ~]# wc -c /etc/fstab
501 /etc/fstab
[root@localhost ~]# wc -l /etc/fstab
11 /etc/fstab
[root@localhost ~]# wc -w /etc/fstab
54 /etc/fstab

$ at		时间	<文件		# 在某个时间,将文件中的命令执行

6 grep行级过滤

格式:
		grep		选项			"字符串"		文件

选项:
		-A数字 			#列出符合条件的行,并连续列出后续n行(如果小写,那么会列出前后 n行)。 
		-B数字 			#列出符合条件的行,并连续列出前面n行(如果小写,那么会列出前后 n行)。 
		-c 				 #统计符合条件的字符串行数 
		-i 				#忽略大小写 
		-n 				#输出行号
		-v 				#反向查找(取反) 
		-o 				#只列出关键字 
		- - color=auto  #搜索出的关键词高亮显示
[root@localhost ~]# grep -A2 "root" /etc/passwd			#-A数字 	#列出符合条件的行,并连续列出后续n行(如果小写,那么会列出前后 n行)。 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@localhost ~]# grep -c "root" /etc/passwd			#-c 	#统计符合条件的字符串行数 
2
[root@localhost ~]# grep -i "root" /etc/passwd			-i 		#忽略大小写 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -n "root" /etc/passwd			#-n 	#输出行号
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# grep -v "root" /etc/passwd			# -v 	#反向查找(取反) 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
[root@localhost ~]# grep -o "root" /etc/passwd				#-o 	#只列出关键字 
root
root
root
root
[root@localhost ~]# grep --color=auto "root" /etc/passwd		#- - color=auto #搜索出的关键词高亮显示
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologi

7 通配符

*[ - ][ ^ ]
任意一个字符字符范围不是括号内的一个字符 例如: [ ^b] 除了b
[root@localhost ~]# ls /root/test[^1].sh
/root/test2.sh  /root/test3.sh  /root/test4.sh  /root/test5.sh

bash中其他特殊符号

符号作用
’ ‘取消特殊含义(范围取消)
\取消特殊含义(字符串取消)
“ ”表示整体
· ·反引号,在“ ” 中执行命令,和 $(命令) 一样
$(命令)引用系统命令
(命令)命令在子shell中执行
{命令}命令在当前shell中执行

变量

	echo   $((算式))				#计算算式
	a=3							 #赋值
	b=9		
	echo   $((a*b))				#计算ab
[root@localhost ~]# yq=123					#验证当前shell、子shell的赋值不一样
[root@localhost ~]# echo $yq
123
[root@localhost ~]# (yq=asd;echo $yq)
asd
[root@localhost ~]# echo $yq
123
[ ]变量测试
#注释
$调用变量的值