linux-day5:服务监听|管道|shell|修改PATH|shell函数|shell语法

服务监听

ps -aux | grep nginx #查看服务
pstree # 树形查看服务
netstat -anop | grep :80 # 监听网络连接状态
kill -9 进程号

管道

管道的操作符是 " | ",它只能处理经由前面一个指令传出的正确输出信息,然后传递给下一个命令,作为下一个命令的标准输入。
注意:
管道命令只能处理前一个命令的正确输出,不能处理错误输出。
管道命令的右边命令,必须要能够接收标准的输入流才行
常用:
netstat -anop |grep :80
ls -al | more

有些命令无法接受输入流,需要通过xargs来将输入流转换成为命令行参数。
find -name a.txt | xargs rm -rf #查找并删除

重定向(>,>>)

输出重定向:
ls > 1.txt # 会新建文件,若文件已存在,会清空
ls >> 1.txt # 追加到文件末尾,若文件不存在则创建
错误重定向:
ls /xxx 2> 1.txt # 将标准错误重定向到1.txt(2>表示有错误才重定向)
同时重定向输出和错误:
ls /xxx /home &> 1.txt # 将标准输出和错误同时重定向到1.txt文件 (&>表示同时重定向)

多个命令

cmd1;cmd2 执行完成第一个命令以后,紧接着执行下一个命令。如mkdir a;ls -al
cmd1 || cmd2 如果前面的命令执行成功了,后面的命令就不再执行了;前面的命令执行失败以后,才能回执行后面的命令
cmd && cmd2 前面的命令执行成功以后,才会执行后面的命令;如果前面的命令执行失败,后面的命令就不再执行 make&&make install

shell编程

一、基本

shell是批处理文件,一般是sh结尾的文本文件,如a.sh

三种执行方法 :

  1. bash a.sh
  2. source a.sh
  3. ./a.sh # 此时要保证a.sh具有执行权限,比如用chmod a+x a.sh增加权限

二、Shell 脚本首行

脚本文件第一行通过注释的方式指明执行脚本的程序。
在 Shell 脚本中, # 开头的文本是注释, 但第一句 #! 开头的这句话比较特殊, 他会告诉 Shell 应该使用哪个程序来执行当前脚本。
常见方式有:
#!/bin/sh
#!/bin/bash
#!/usr/bin/env bash
Python 脚本的第一句一般是 #!/usr/bin/env python

三、第一个脚本

#!/bin/bash
 echo "Hello"
 echo "I am `whoami`"
 echo "I love Linux"
 echo "The CPU in my PC has `cat /proc/cpuinfo |grep -c processor` cores"
 exit 0
  • 字符串可用单引号、双引号或者不用引号
  • ``反引号表示执行linux命令
  • 查看脚本的退出状态: echo $? 为0则正常

变量

变量 : a=5
使用变量:$a

#!/bin/bash
a=10
echo there are $a people.
echo 'there are $a people."

无引号和双引号中, a 指 向 变 量 a 单 引 号 中 , a指向变量a 单引号中, aaa就是$a,输出:there are $a people.

$

( c m d ) 表 示 执 行 命 令 , 如 (cmd) 表示执行命令,如 (cmd),(whoami),等价于whoami
$((1+1)表示执行运算1+1

$的特殊值

$# 代表传入参数的个数
$@ 代表传入参数的列表
$0 代表脚本本身 (脚本名字)
$1 代表传入的第一个参数,$2,$3…以此类推

bash abc.sh 参数1 参数2 执行时可以传参
脚本就可以通过 echo $1输出第一个参数:“参数1”
$* 以字符串方式显示所有传入的参数 echo @* 输出所有参数
$# 显示所有传入的参数数量
$$ 脚本运行的进程ID
$? 显示脚本执行结果,0表示没有错误

全局变量

定义当前Shell下的全局变量

  1. 定义: export ABC=9876543210123456789
  2. 定义完后, 在终端里用 source 加载脚本: source ./test.sh
  3. 查看 echo $ABC

常用的全局系统环境变量

$PATH: 可执行文件目录
$PWD: 当前目录
$HOME: 家目录
$USER: 当前用户名
$UID: 当前用户的 uid

修改PATH:

export PATH=$PATH:/home/laijunyong/Documents/

上述办法重新连接会丢失,持久化方法:
在~/.bashrc 后添加上述语句,退出后执行source ~/.bashrc

获取用户输入

read -p “请输入一个数字:” num
echo “您输入的是:$num”

if else

abc.sh

a=10
if [ $a -gt 5 ]   # 比较语句不能用$a>5,必须要用条件测试命令[ 10 -gt 5 ],中括号两边要有空格,比较条件如下
then
    echo "a>5"
else
    echo "a<=5"
fi

then
    echo "a>5"
else
    echo "a<=5"
fi

编辑完毕要执行:bash abc.sh或source abc.sh

if ls /      #执行返回是0则为True,其他为false
then 
   echo "right"
else
	echo "wrong"	

编辑完毕要执行:#source abc.sh

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

read -p "input a directory:" dir
if  [ -d $dir ]
then
    echo "$dir是个文件夹"
else
    echo "$dir不是文件夹"
fi

case语句

case  "$var" in
         exp1)
         command1
         ;;
         exp2)
         command2
         ;;
         exp3)
         command3
         ;;
         *)
         comman4
         ;;
esac

示例:

#!/bin/bash
read -p "请输入数字" num
case $num in
    0)
        echo 星期日
        ;;
    1)
        echo 星期一
        ;;
    2)
        echo 星期二
        ;;
    3)
        echo 星期三
        ;;
    4)
        echo 星期四
        ;;
    5)
        echo 星期五
        ;;
    6)
        echo 星期六
        ;;
    *)
        echo 其他
        ;;
esac

for循环

for 变量 in 序列
 do
     要执行的命令
 done

示例:

#打印1-10的偶数
for i in `seq 1 10`
 do
     if [ $[ $i % 2] == 0 ]
     then
         echo "偶数: $i"
     else
         echo "奇数: $i"
     fi
 done
#c语言风格的for循环
for ((i=0; i<10; i++))
 do
     echo "num is $i"
 done

函数

格式:

function foo() {
     echo "---------------------------"
     echo "Hello $1, nice to meet you!"
     echo "---------------------------"
     echo $1   #a
     echo $2   #b
 }
 foo a b c d   # 调用并传参

函数的使用

在终端或脚本中直接输入函数名即可,不需要小括号
传参也只需将参数加到函数名后面,以空格做间隔,像正常使用命令那样

foo arg1 arg2 arg3 ...

数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
与大部分编程语言类似,数组元素的下标由0开始。

定义数组

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

array_name=(value1 ... valuen)
# 示例
arr=(hello good "yes" a 12)
#或者
nums[0]=1
nums[1]="good"
nums[2]=yes

修改值

arr=(hello good "yes" a 12)
arr[0] = hi
# 或者:
echo ${arr[0]}
# 获取所有值
echo ${arr[*]}
# 获取长度
echo ${#arr[*]} 
# 遍历
for ele in ${arr[*]}
do
    echo $ele
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值