Linux Shell入门常用命令使用

本文详细介绍Linux下的各种Shell类型及其使用方法,包括BourneShell、BASH等,并深入探讨Shell的输入输出、变量处理、命令执行等内容。

linux支持哪些shell?Bourne Shell、BASH、Korn Shell、C Shell
查看所在文件:/etc/shells
在这里插入图片描述
比如一些命令,nologin----禁止用户登录、history----命令历史表等等

1、shell输入输出
命令有:echo、read、cat和管道符+重定向、tee
标准输入、输出和错误信息

echo
echo命令可以显示文本行或变量取值,或者把字符串输入文件中。
格式:echo 字符串
使用:创建一个sh文件,输入简单的命令并保存,再执行命令

vim 1.sh
#!/bin/bash
echo "开始"
echo "内存"
free -h
echo "空间"
df -h
echo "结尾"

执行:./1.sh

√脚本的执行:
----路径执行(绝对路径/相对路径)

./1.sh 相对
./root/1.sh 绝对

----sh或bash命令执行

sh 1.sh 或 bash 1.sh
sh /root/1.sh 或 bash /root/1.sh

---- . 或source执行

. 1.sh 或source 1.sh
. /root/1.sh 或source /root/1.sh

√变量取值
1)声明和赋值

num=123
echo $num
num="123"
Num=${num}abc

等号左右不要有空格(如有空格,加引号)
变量名严格区分大小写
变量名可以字母、字母+数字,不允许纯数字

2)查看变量取值(`` ☞反撇号)

num="123"
Num=${num}abc
echo "num的值是$num,Num的值是$Num"
num=123
Num=345
expr $num + $Num
num2=`expr $num + $Num`

num2=$(expr $num + $Num)

3)清除变量

num=123
unset num

定义和清除变量,变量名的前面不需要$
引用变量时,变量名必须加$

4)变量类型
☞用户自定义变量
☞环境变量(系统、用户),查看命令:

env

echo $PATH 

☞位置变量

查看端口号是否被占用:
netstat -nao | grep 22

√命令的执行
1)判断内部命令/外部命令

type 命令名

2)内部命令,直接执行
外部命令:先找到命令文件,再执行
当前目录找不到,找PATH

√转义符
1)普通字符转义为特殊字符
\n----换行
\t----水平跳格
\v----垂直跳格 echo -e

2)特殊字符转义为普通字符

rm -rf 123\*
echo \$num

√引号
1)双引号
识别特殊字符,比如$、\、“”、``等

2)单引号
除了单引号本身,没有特殊符号----所见即所得

3)反撇号/反引号

`expr 123 + 234`
ll `find /etc -name "ifcfg*" -type f `
find /etc -name "ifcfg*" -type f | xargs ls -l
grep `echo $SHELL ` /etc/passwd

date命令:
在这里插入图片描述

read
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志
-p 后面跟提示信息,即在输入前打印提示信息
-e 在输入的时候可以使用命令补全功能
-n 后跟一个数字,定义输入文本的长度,很实用
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码
-t 后面跟秒数,定义输入字符的等待时间
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的

举例:

read -p "是否删除普通文件?(yes/no)" n
read n1 n2 n3
# 输入 123 124 125
# 输出
echo $n1 $n2 $n3

linux中的"三剑客":
grep 更适合单纯的查找或匹配文本
举例:

ps -ef grep ssh

sed 更适合编辑匹配到的文本
sed参数信息
-n 取消默认输出
-r 识别扩展正则
-i 将内存中的 信息覆盖到磁盘中
-e 识别sed命令多个操作指令
说明:-ni同时用,会把文件清空
举例:

ip a s eth0 |sed -rn '3s#^.*net(.*)/24.*#\1#gp'

awk 更适合格式化文本,对文本进行较复杂格式处理
语法格式:awk ‘{pattern + action}’ {filenames}
命令 + 参数 + 模式-动作 + 文件
print----显示第几列
NR----显示第几行
举例:

free -h | awk 'NR==2{print $4}'

tee
tee -a 文件名(a表示追加)
动态查看,实时监控(带.log、.out后缀名的文件)

tail
tail -f 文件名(显示最后10行,之后显示最新内容)(多个文件)
tailf 文件名(一个文件)

重定向
√标准输出(命令/脚本的正确结果)
√标准错误(命令/脚本执行产生的报错)
1)2> 文件名
文件不存在,会被创建;文件存在,原内容被覆盖
2)2>> 文件名
文件不存在,会被创建;文件存在,则追加,保留原内容

√标准输入
1)> 文件名
文件不存在,会被创建;文件存在,原内容被覆盖
2)>> 文件名
文件不存在,会被创建;文件存在,则追加,保留原内容

举例:
输出正确和错误信息同时保存

sh 12.sh > 12.log 2> &1

sh 12.sh &> 12.log

正确结果保存在12.log,错误信息保存在系统垃圾箱

sh 12.sh > 12.log 2> /dev/null
sh 12.sh &> /dev/null
ping 172.20.149 >> ping.out &

2、shell后台执行命令
将命令/脚本放到后台执行
1)命令执行过程中,ctrl+z
2)命令执行一开始就放到后台

命令 &

查看后台命令:jobs
[1]后台任务号
+stopped 暂停

举例:
输入命令:vi 1.log
直接ctrl+c

终止后台任务:
----kill %后台任务号
----kill 进程号
先查看进程号ps -ef | grep vi,再kill -9 进程号

3)后台任务重新拿到前台来执行

fg %后台任务号

3、定时任务(crontab)
默认当前用户下home目录
* * * * *
每个*号分别代表分时日月周
举例:
每分钟执行一次

***** echo "hi~" >> hi.log
***** sh /root/1.sh >> 1.log

每小时的第10分钟执行一次

10**** echo "hi~" >> /opt/hi.log

每隔10分钟执行一次

*/10**** echo "hi~" >> /opt/hi.log

每天12:10执行一次

1012*** echo "hi~" >> /opt/hi.log

每个月1号的12点10分执行一次

10 12 1 ** echo "hi~" >> /opt/hi.log

每年的7月1号的12点10分执行一次

10 12 1 7 * echo "hi~" >> /opt/hi.log

7月的每周三的12点10分执行一次

10 12 * 7 3 echo "hi~" >> /opt/hi.log

每天12点第1分钟到第5分钟执行一次

1-5 12 *** echo "hi~" >> /opt/hi.log

每天12点10分、12点30分执行一次

10,30 12 *** echo "hi~" >> /opt/hi.log

相关命令:
查看定时任务服务状态

systemctl status crond
systemctl start crond
systemctl stop crond

编辑定时任务

crontab -e

查看定时任务

crontab -l

清除定时任务

crontab -r

每个用户都可以拥有自己的定时任务
root用户可以编辑、查看、删除、增加其他用户定时任务

crontab -u 用户名 -e
crontab -u 用户名 -l
crontab -u 用户名 -r

4、shell语法
1)if 条件判断

if [ 条件 ]
then
    语句
elif [ 条件 ]
then
    语句
else
	语句
fi

注:语句之间不换行,要加分号

2)字符串判断
[ 字符串 = 字符串 ]
[ 字符串 != 字符串 ]

3)数值判断
[ 数值 操作符 数值 ]

操作符表示
-eq=
-ne!=
-lt<
-le<=
-gt>
-gege

题目:获取网络内可用的ip地址(host找不到可用:ping -c)

echo $?的输出为0,$?的作用是什么?

  • 判断条件真假
  • 判断命令是否正确执行

$? -eq 1 为真
$? -eq 0 为假

4)case语句

case $变量名 in
 "值 1“)
 	 	程序
 	 	;;
  "2)
 	 	程序
 	 	;;
 ............
 		*)
 		程序
 		;;
 	esac

在这里插入图片描述

5)for循环
第一种写法:

for 变量 in 值1 值2.....
do
 	程序
done
#! bin/bash
for i in "$*"
do
	echo "num is $i"

第二种写法:

for (( 初始值;循环控制条件;))
	do
	程序
	done
#! bin/bash
SUM=0
for((i=1;i<=100;i++))
do
		SUM=$[$SUM+$i]
done
echo "sum=$SUM"

6)while循环

while [ 条件判断式 ]
	do
	程序
	done
#! bin/bash
SUM=0
i=0
while [ $i -le 2 ]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "sum=$SUM"

7)函数

[ function ] funcname[()}
{
	Action;
	[return 值;]
}

调用 funcname []
#! bin/bash
SUM=0
for((i=1;i<=100;i++))
do
		SUM=$[$SUM+$i]
done
echo "sum=$SUM"

#! bin/bash
function getSum(){
	SUM=$[$a+$b]
	echo "sum=$SUM"

read -p "请输入第一个数a" a
read -p "请输入第二个数b" b

# 调用getSum
getSum $a $b

5、其他一些命令
查看ip:

ifconfig

修改静态ip:

vim /etc/sysconfig/network-scripts/ifcfg-etho
# 修改:
onboot=yes
bootproto=static
# 添加:
IPADDR=172.20.1.100
NETMASK=255.255.255.0
GETEWAY=172.20.1.1

临时修改,即时生效,重启后失效

ifconfig eth0 172.20.1.120 netmask 255.255.255.0

修改网络配置文件,重启后生效:
1)系统重启

shutdown -r now
reboot

系统关闭:

shutdown -h now
halt
poweroff

2)网络重启

systemctl restart network
systemctl stop network
systemctl start network

3)网卡重启

ifconfig eth0 down
ifconfig eth0 up
ifdown eth0
ifup eth0
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍婧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值