Linux Shell 学习笔记

Linux Shell 初步编程

笔记向,慎读

查看shell

echo $Shell
cat  /etc/shells

Linux 默认 default shell 为->sh/bash

目录结构

/            根目录 只放目录,不放文件
/home        用户的宿主目录
/usr/bin     命令文件目录
/usr/sbin    放置系统管理员使用的可执行命令
/etc         系统配置文件所在地
/var         经常变动的目录,存放系统日志的地方
/tmp         临时文件目录,会存放程序临时产生的文件
/dev         设备文件存储目录

常用命令的基本用法

wc [-c|-w|-l]  [文件名]  #字节数|单词数|行数

chmod [u|g|o|a]  [+|-|=] [mode] 文件名

grep [-i|-v...]  查找条件 目标条件
     -i:查找时忽略大小写
     -v:查找与条件不符合的行
     -A1:获得符合匹配的下一行,包括匹配行
find [查找范围]  [查找条件]
                 -name -szie -user -type
tar [选项] 归档文件名 源文件或目录
    -z或-j必须其一,表示使用gzip还是bzip2压缩
    -c或-x只能选其一,c表示创建压缩,x表示解压缩

sort        常用参数
-u          删除所有重复行
-r          以降序顺序排列
-n          以数值顺序排列
-k n        对文件第n行进行排列
-t :        以分隔符:进行排列
-c          是否排序

特殊变量

$0       脚本名
$1 - $9  脚本参数
$#       命令行参数个数
$@       命令行参数独立表示
$*       命令行参数用一个字符串表示
$$       当前进程id
$?       上一条命令回传值,成功为0

数组声明

array=(1 2 3 4)
${array[2]} 获得第二个元素
${array[*]} 获得所有元素
${#array[*]}获得数组数目

条件测试

  • test expression
  • [ expression ] 注意[] 间的空格

数值比较

-eq=   -gt>  -lt<  -ge>=  -le<= -ne!=

字符串比较

-n string 是否为不空
-z string 是否为空
s1 = s2 注意空格
s1 != s2   字符串比较时最好用双引号,以免出错

文件测试

-d file 目录
-e file 存在
-f file 普通
-b file 块设备
-x file 是否可执行
-L file符号化链接

复合条件测试

!空格 expression
expression -a expression1
expression -o expression1
#冒泡排序
array=(10 9 8 7 6 4 2 3 1)

for((i=${#array[*]}-1;i>0;i--));
do
    for((j=0;j<i;j++));
    do
        if [ ${array[j]} -gt ${array[j+1]} ]   
        then
            t=${array[j]}
            array[j]=${array[j+1]}
            array[j+1]=$t
        fi
    done
done

echo ${array[*]}

读取和输出变量

echo  -n (去换行)  -e (解析转义)
read  [-p|n|s] var1  var2 ....  p为提示信息,n为字符数限制,s为密码
#利用read读取文件内容
while read  line 
do
    echo $line
done <bubble.sh

重定向

错误命令2>文件  覆盖方式
错误命令2>>文件 追加方式
命令 >文件 2>&1 正确和错误输入到同一个文件
&> /dev/null    不产生输出信息

shell 文本处理

${#string}            计算字符串长度
${string:pos:len}     提取子串
${string#substring}   从开头,删除最短匹配substring
${string%%substring}  从尾开始删除最长匹配
${string%substring}   从尾开始删除最短匹配
${string/#old/new}    如果结尾以old ,以new替换
${string/%old/new}    如果结尾以old ,以new替换
${string/old/new}     以new替换old

高级文本处理

awk

awk  '条件{行为}'
$0 记录当前记录
$1-$n 记录第n个字段,以FS分割
FS                 分割字段
NF                  当前列数
NR                  已经读出的记录数

sed

#常用用法
sed -i "3,6s/old/new/g"  source  [i表示在源上修改]
                                 [3,6表示在第3,6行修改]
d命令
sed '/fish/d' my.txt 删除有fish行
sed '2d' my.txt      删除第二行
sed '2,$d' my.txt    删除第二行到结尾

c命令
sed '2c XXXXX'       替换第二行
sed '/fish/c XXXXX'  替换有fish的行

a和i是追加插入

几个例子

#判断是大写还是小写还是数字
read -p "input char:" word
case $word in
    [[:lower:]] )
        echo "$word is lower";;

    [[:upper:]] )
        echo "$word is upper";;
    [0-9]   )
        echo "$word is digital";;
esac
#将小写替换成大写

for line in `cat output.txt`
do
    echo $line |tr [a-z] [A-Z]
done
echo -e  "\n"
sed 's/[a-z]/\u&/g' output.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值