【Shell】脚本学习

本文介绍了Shell脚本的基础知识,包括基础命令的使用、变量的定义与操作、shell运算及条件测试。通过实例讲解了如何调试脚本,并探讨了变量内容的删除和替换技巧,帮助读者更好地掌握Shell脚本的整合应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shell学习

ss -an |grep :80                #查看80端口是否被占用
echo $?   # 查看打印出来的值
echo $?? # 获取当前的值
ping -c1 www.baidu.com && echo "www.baidu.com is up" || echo "www.baidu.com is down!"
## 如果不要ping的中间信息就把信息指向null里面去
ping -c1 www.baidu.com &>null && echo "www.baidu.com is up" || echo "www.baidu.com is down!"
#!叫做Shebang, 定义这个程序用哪个解释器执行,没有明确指定解释器的时候第一行会执行,如果想是bash 或sh 文件
就指定了解释器

基础命令

#找别的解释器过来帮忙:
#!/bin/bash
ping -c1 www.baidu.com &>/dev/null && echo "www.baidu.com is up" || echo "www.baidu.com is down!"
&& 返回值为0接着往下执行
/usr/bin/python3 <<-EOF 
print("hello word!")
EOF
​
echo "hello bash"
# 一段代码传给别的命令执行
which cat
/usr/bin/cat <<-EOF
>111
>222
>EOF
111
222

python的语法更为严谨不能借shell的命令

使用bash sh执行的时候是在sub shell(子shell)中执行,source bash.sh是在当前shell中执行

如果说想要影响当前shell使用source执行

usermod -s /bin/bash alice    #给用户添加解释器
su alice 没有加载新用户的shell环境,叫做nologin shell 
​
su - alice 加载了新用户的shell环境,叫做login shell

历史命令功能:
看见! #代表历史命令
!+数字 #代码history里执行过的命令第几个
!+da  #找到最近一个da的命令执行
head !$ #上一个命令最后一个参数
!!    #上一个命令
别名:
alias  # 当前的别名功能
unalias # 取消当前的别名功能
命令前+\ #跳过别名
快捷键:
^R      #搜索一个历史命令
^d      #退出
^A  ^E  #将光标移到命令的前面和最后
^L      #清屏
^U      #删除光标前面
^S      #不显示输入
^Q      #恢复显示
后台运行:
&
nohup +命令   #关闭终端依然运行
^Z           #暂停
bg+作业号     #后台运行
fg           #变成前台运行
kill %3      #给当前这个shell终端作业号为3的发信号
重定向:
0    #代表  标准输出  默认键盘
1    #默认屏幕
2    #改变方向
>    #覆盖
>>   #追加
2>   #错误输出
2>>  #错误追加
2>&1 #2的描述重定向到1
&>   #混合重定向
cat </etc/hosts >/etc/hosts1 #相当于copy命令
cat <<EOF
>1
>2
>EOF
1
2
管道:
#使用tee命令可以输出屏幕同时保存到文件里去
#可以写入多个文件
tee -a #追加内容
free -h | tee mem.txt
cd;eject   #弹出挂载的光盘
cd /home/lre; ls  #哪怕第一条命令失败,后面也会执行
./configure && make && make install # 如果命令成功,再接着执行
#shell通配字符:
*  #匹配任意多个字符   rm -rf *
?  #匹配任意一个字符   ls l?ve
[] #匹配括号中任意一个字符 [a-z] [0-9] [^a-Z](取反)只匹配其中一个!!
() #在子shell中执行,不影响当前系统环境
{} #集合  touch file{1..9} 创建file1 - file9,mkdir -pv /home/{333/{aaa,bbb},444}
cp -rv /etc/sysconfig/network-scripts/ifcfg-eth0{,.old}
\ 转义符,让统配字符回归本意  echo \*

echo

echo -e "\e[1;31m This is red"
echo -e "\e[1;32m This is green"
echo -e "\e[0m]"  #恢复
echo -e "\e[1;31m This is red.\e[0m"

shell变量

#!/bin/bash
​
#ip=www.baidu.com
#read -p "Please input a ip: " ip
read ip
​
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ]; then
        echo "$ip is up."
else
        echo "$ip is down."
fi
​
root@hsw:/home/dcr/xuexi# ./ping_yong2.sh
www.baidu.com
www.baidu.com is up.
三种变量模式
ip=1.1.1.1  #自定义变量,影响范围只在当前shell
read ip
2.2.2.2
./ping.sh 3.3.3.3
export ip2=5.5.5.5  #全局变量,影响当前shell和子shell
ip1=1.1.1.1
dir_path=/etc/a.txt   #自定义变量
export ip1 dir_path  #变为全局变量
#!/usr/bin/bash
. public.sh     #可以包含了另一个脚本的所有比那辆
echo "ip10 is : $ip10"
echo "dir_path is : $dir_path"

在public.sh定义了公共变量被其他两个脚本所使用

#增加新的环境变量
vim /etc/profile
PATH=#PATH:/new/bin   #追加环境变量
export PATH
source /etc/profile
#位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值