Linux 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

每 天 早 睡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值