Shell学习

文章目录

  • 查看当前计算机使用的shell
  • 输出重定向
    • 正确
      • 覆盖
      • 追加
    • 错误
      • 覆盖
      • 追加
    • 同时追加到文件
      • 一起保存
      • 分开保存
  • 输入重定向
  • 多命令顺序执行
    • &&
    • ||
  • 管道符
    • 命令1 | 命令2
  • 通配符
  • 特殊符号
    • $()
  • 对于shell所有变量赋值默认是字符串
  • set
  • set -u
  • 删除变量
  • 环境变量
  • 查看环境变量
  • 位置参数变量
  • \$*、\$@、$#
  • $?、\$$、\$!
    • $?
    • \$$
    • \$!
  • read
  • 数值运算
    • 声明整数
    • 声明数组
    • 查看变量类型
    • 其他
  • 运算
    • $(())
  • 变量测试
  • 判断
    • 文件判断
    • 文件权限判断
    • 文件比较
    • 数值比较
    • 注意[]里面的空格
    • 字符串比较
    • 多重判断
  • if
    • 单分支if
    • 多分支if
    • 退出if
    • case语句
  • 循环
    • 语法1
    • 对指定目录下的所有zip文件解压
  • while循环
  • 通配符
  • 正则表达式
  • grep取反
  • 字符截取命令
    • 提取列
  • print
  • awk
    • 设置分隔符
    • 条件语句
  • sed
    • 打印第二行
    • 删除第2-4行
    • 替换
      • 替换整行
      • 替换单个字符
      • 多个命令链接
  • sort 排序
    • 默认排序
    • 按照字符串分割,并按照制定列排序
  • 统计命令
  • 统计文件夹下所有java文件行数

查看当前计算机使用的shell

echo $SHELL

输出重定向

正确

覆盖

ifconfig > test.log

追加

ifconfig >> test.log

错误

覆盖

ifconfiff 2> test.log

追加

ifconfiff 2>> test.log

同时追加到文件

一起保存

命令 &>>文件

分开保存

命令>>正确文件 2>>错误文件

输入重定向

wc -c < test.log
-c:统计字节数
-w:统计单词数
-l:统计行数

多命令顺序执行

顺序执行

&&

同java

||

同java

管道符

命令1 | 命令2

命令执行的结果会传递给命令2

ls -l /etc/ | more

通配符

特殊符号

$()

将系统变量赋值
gg=$(date)

echo $gg
2020年 4月15日 星期三 16时28分54秒 CST

对于shell所有变量赋值默认是字符串

set

查看系统所有变量

set -u

Shell学习_第1张图片
如果变量不存在,会提示

删除变量

unset a

环境变量

环境变量在当前shell和这个shell的所有子shell中生效

export y=6

查看环境变量

env

位置参数变量

$1:代表第一个参数
$2:代表第二个参数

#!/bin/bash
sum=$((10 + 20))
echo $sum

sum1=$1
sum2=$2
sum3=$((sum1 + sum2))

echo $sum3

./sum.sh 32 48

30
80

$*、$@、$#

#!/bin/bash

# 将输入作为整体,只循环一次
for i in "$*"
        do
                echo $i
        done

# 将输入作为单个,一个一个循环
for j in "$@"
        do
                echo $j
        done

# 打印参数个数
echo $#


./canshu.sh 11 22 33 44 55 66

Shell学习_第2张图片

$?、$$、$!

$?

返回上一个命令执行状态,0为正确,非0为错误

$$

当前进程的进程号

$!

后台运行的最后一个进程的进程号

read

#!/bin/bash
# -p:提示文本
# -t:停留时间
read -p "xingming:" -t 30 name
echo $name

# -s 用户输入信息不现实在命令行上
read -p "mima:" -s passwd
echo -e "\n"
echo $passwd

# -n 控制用户输入的长度
read -p "xingbie:" -n 1 xingbie
echo -e "\n"
echo $xingbie

数值运算

声明整数

Shell学习_第3张图片

声明数组

Shell学习_第4张图片

查看变量类型

在这里插入图片描述

其他

运算

$(())

echo $((aa + bb))
33

echo $(($aa + $bb))
33

变量测试

判断

文件判断

Shell学习_第5张图片

文件权限判断

文件比较

Shell学习_第6张图片

数值比较

注意[]里面的空格

[ $i -le 100 ]

字符串比较

在这里插入图片描述

Shell学习_第7张图片
Shell学习_第8张图片

多重判断

Shell学习_第9张图片

if

单分支if

#!/bin/bash

test=$(env | grep USER | cut -d "=" -f 2)

if [ "$test" == "xiehanchao" ]
        then
                echo "is yaoyan"
fi

#!/bin/bash

test=$(env | grep USER | cut -d "=" -f 2)

if [ "$test" == "xiehanchao" ]
        then
                echo "is yaoyan"
        else
        		echo “no”
fi

多分支if

if []
then
elif []
then
else
fi

退出if

exit 错误码

case语句

#!/bin/bash

read -p "请输入y or n:" type
case $type in
        "y")
                echo "shi yes"
                ;;
        "n")
                echo "shi no"
                ;;
        *)
                echo "请输入正确的"
esac

循环

语法1

Shell学习_第10张图片

对指定目录下的所有zip文件解压


#!/bin/bash

cd /Users/xiehanchao/studyshell
ls *.zip > ziplog.log

for fileName in $(cat ziplog.log)
        do
                echo $fileName
                unzip -n $fileName -d ./tt  &> log.log
        done


while循环

#!/bin/bash

s=0
i=1
while [ $i -le 100 ]
        do
                s=$(($i+$s))
                i=$(($i+1))
        done
echo $s

Shell学习_第11张图片

通配符

在这里插入图片描述
Shell学习_第12张图片

正则表达式

grep取反

ls | grep -v “需要取反的字符串”

字符截取命令

提取列

Shell学习_第13张图片
Shell学习_第14张图片

print

Shell学习_第15张图片
Shell学习_第16张图片

Shell学习_第17张图片

awk

$2代表截取的列数
awk '{printf $2 "\t" $4 "\n"}' student.txt

Shell学习_第18张图片
截取根路径使用占比

在这里插入图片描述

设置分隔符

在这里插入图片描述

条件语句

在这里插入图片描述

sed

打印第二行

在这里插入图片描述

删除第2-4行

在这里插入图片描述

替换

替换整行

在这里插入图片描述

替换单个字符

3s:第三行
02/09:将02替换成09
g:如果有多个替换多个
在这里插入图片描述

多个命令链接

在这里插入图片描述

sort 排序

默认排序

Shell学习_第19张图片

按照字符串分割,并按照制定列排序

-n 按数字进行排序,默认是字符串

Shell学习_第20张图片

统计命令

Shell学习_第21张图片

统计文件夹下所有java文件行数

#!/bin/bash

s=$(ls *.sh | grep -v conutJava.sj)
count=0
for i in $s
        do
                t=$(cat $i | wc -l)
                echo $t
                count=$(($count+$t))
        done

echo "总数"$count

你可能感兴趣的:(shell,shell)