Linux基础练习-04-shell

本文详细介绍了Linux Shell脚本的基础知识,包括脚本声明、命令历史、输入输出重定向、命令执行控制、变量及环境变量的使用、正则表达式等。通过实例演示了如何编写和执行Shell脚本,以及如何利用工具如awk和sed进行文件处理。
摘要由CSDN通过智能技术生成

脚本例:
#!/bin/Bash //shell的强宣称
#never mind what it record here, cause it just a blank. //#注释
echo -e “hello world” //shell内容
注意新建的脚本需要赋权,保存位置默认为bin/Bash且不推荐换地方。

使用历史
命令使用历史默认先放入缓存中,在关机或者登出当前用户后再保存在/.bash_history。命令history -c清空历史 -w立即把缓存中的历史写入保存文件 查看历史命令。
在“history”界面,输入“!n”可以重复执行第n条命令一次,输入“!!”可以重复执行上一条命令一次,输入“!***”可以重复执行以“***”开头的命令一次。
此外,对历史命令的操作可以通过其别名进行,但是不需要所以搁置。

输入输出重定向
将命令输入/输出至指定的文件/设备。
格式:命令A &>(覆盖) &>>(追加至) 文件B,将命令A的结果覆盖/追加至文件B。

多命令顺序执行
com1 : com2 com1/2依次执行
com1 && com2 com1执行成功则执行com2
com1 || com2 com1执行失败则执行com2
com1 | com2 com1执行成功的结果输入com2执行

dd复制
格式:dd if=input of=output bs=单包大小 count=预计传送包数。
将input以bs/包,传送count包数,到达output。

通配符,只能在完全匹配命令中使用,比如ls、find、cp…
“?” 任意一个字符
“*” 0~∞个字符
“[]” 括号内字符,^内字符表示逻辑非。
如:#rm -rf *。将当前目录下所有内容删掉。
#grep ?ove /home。在/home目录下搜索所有?ove,比如aove、bove、love…
“‘’” 单引号表示其中所有内容均为纯字符且无特殊意义,比如’$ ls’表示$ ls三个字母而非ls命令。
“””” 双引号表示只有字符没有特殊含义。比如“ls”表示ls两个字母而非ls命令,但”$(ls)“表示ls命令的结果。
$() 引用系统命令。
$ 调用变量值。如name=a,echo name=name,则echo $name=a。
\ 转义符,无实际意义。

自定义变量
不能以数字开头,且默认为字符串型。数值运算只能对数值型变量进行。命令set查看本用户所有变量,env查询特定变量,unset删除特定变量。
环境变量
在为自定义变量赋值前用export声明,格式:#export age=17。

PATH存放着系统命令,一般用PATH中的命令不用绝对路径,比如:ls、cd和chown…此外用命令PS1=‘[]$’可以设计提示头。请自行查找设计。

参数位置设定
$n 当n=0表示命令本身,当n={1~∞}表示第1~∞个参数。
$* 命令内所有参数。
$@ 命令行每一个参数。
$?最后一次命令执行的判据,返回值为0则成功执行。
$$ 当前进程号。
$! 后台执行的最后一个命令。
读取输入参数模块:read -p输出一个输入提示 -t等待用户输入时长上限 -n只接受长度为n的字符 -S隐藏输入字符。

数值型参数
将参数申明为数值型参数命令:declare -i设定为数值型 +i取消数值型设定 参数名。除了命令,还可在赋值时直接使用符号“参数= ( ( ) ) ” 和 “ 参 数 = (( ))”和“参数= (())=[ ]“能将参数设为数值型。

变量置换方式有些复杂,一般用不上,故搁置。

Linux启动/关机需要一系列公共配置区,其使用顺序越靠后的公共配置区的相同文件决定了该文件内参数的实际数值,比如时间。不必掌握,故搁置。

正则表达式
作用是匹配文件中合适的字符串,只能在包含匹配中使用,如grep、awk和sed…

  • 对前一字符匹配n次。如a*,表示任意内容,因为a可以出现0~∞次。但aa*表示以a开头的双字符。
    . 匹配除\以外任意字符。
    ^test 匹配以test开头的行。
    test$ 匹配以test结尾的行。
    [] 任取括号内一个字符,[^]表示任取非括号内一个字符。
    {n,m} 对前一个字符匹配不少于n次不多于m次。例子请自行百度。

截取
cut命令能将文件中含某字符段的数行的第1,3列以:为间隔摘出来:cat 文件名 | grep 某字段 | grep -v root | cut -d “:” -f 1,3。但是cut只支持tab和:分隔。
print ‘%ns输出n个字符 %ni输出n个数字 % m.ni输出整数m位.小数n位的浮点数(如%3.2i=123.21…)’ $cat(文件名)。
注意print不需要\n换行,但printf在’ ’结尾要加\n才能换行。
awk命令只支持tab和space间隔,格式:awk ‘条件1{动作1}条件2{动作2}…’ 文件名。可以对文件连续进行一些列操作。
eg:#df -h | grep sda5 | awk ‘{print $5}’ | cut -d “%” -f 1。意为在分区信息界面的sda5行,输出第五列,然后再删掉%间隔后输出第五列的第一列(也就是第五列本身)。如果要读其它分割号,则必须在条件1{动作1}输入“BEGIN{FS=“:”}”,即可读取:间隔文件。
sed命令可以在截取的同时对文件进行修改。命令:#sed -n只将sed的处理行输出 -i将sed修改保存至原文件 ‘动作 a\追加 c\替换 i\插入 d删除 P行’ 文件名。eg:#sed -i ‘2a hello’ file。在file的第二行后追加hello。

排序(只练需要的)
命令:sort -n以数值型排序 -f大小写不计 按字母顺序排序。

统计
命令:wc -l只统计行数 -w只统计单词数 -m只统计字符数。

判断
命令:test -d判断对象是不是目录 -e判断对象存在否 -f判断对象是不是文件 -rwx判断对象的权限 判断对象。该命令通常配合逻辑符号使用。eg:test -d /home && echo “Y” || echo “no”,意为判断/home是不是目录,是则输出Y,否则输出no。

if循环
一般:
#if [ 判断 ];then
程序1
else
程序2
fi
但是也可用elif实现多分支:
#if [ 判断1 ];then
程序1
elif [ 判断2 ];then
程序2
else
程序3
fi

case循环
特点是对单目标进行判断,判断对象需要用$符号读取,eg:
#read -p “Please choose yes/no: “ -t 30 cho
case $cho in
“yes”)
echo “YES”
;;
“no”)
echo “NO”
;;
“*”)
echo “ERROR. Please input yes/no”
;;
esac
此例为读取cho,判断cho内容是yes/no,如果是其它内容则报错并提醒输入yes/no。

for循环
for循环特点是对于判据,每次执行完程序后会重新判断判据是否达成,在判断达成后会重复进行程序,直到判据未达成。eg:
#cd /lamp
ls *.tar.gz > ls.log
for i in $(cat ls.log)
do
tar -zxf $i &> /dev/null
done
此例为将ls.log中保存的所有.tar.log包解压缩到/dev/null中。

while循环和until循环
直到条件判断不成立,用法和if类似,暂时不练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值