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}