shell初级

shell初级

unset

unset命令从当前shell中删除函数或变量

  • 删除变量时,使用-v选项(没有任何选项的情况下,默认此选项),删除函数时,使用-f选项
#!bin/bash
var=123
echo $var   #123
unset var   #null
hello() #定义函数
{
 echo "hello world!"
}
unset -f hello    #删除函数
常用环境变量名
变量名描述
HOME用户专属目录
PATH外部命令的搜索路径
HISTSIZE保存历史命令记录
HOSTNAME主机名称
SHELL当前用户使用的shell类型
LOGNAME当前用户的登录名
shell脚本参数
  • $#代表传入函数的参数个数
  • $@代表所有参数内容
testfunc ()
{
echo "$# parameters"  #   $#代表传入函数的参数个数,而$@代表所有参数内容
echo "$@"
}
testfunc a b c
tesssfunc a "b c"     a为一个参数,b c为一个参数

####输出
>3 parameters
>a b c
>2 parameters
>a b c
引用参数描述
0,1,2…位置参数
*以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个
@从参数1开始,显示所有向脚本传递的参数
#参数数量(不包括参数0)
$脚本运行的当前进程ID号
后台运行的最后一个进程的ID号
显示最后命令退出状态

例子:ps.sh

#!/bin/bash
#记得使用chmod +x ps.sh给其执行权限
ps -eLf |grep $1


IO重定向
管道与重定向

Command>file将command的标准输出重定向到文件中,而不是打印在控制台

1.以>改变标准输出

  • command > 文件路径 #写入文件
echo  "redirect to file" > /DATACENTER1/yuhang.tang/shell_test/a.txt    #打印到了a.txt中
cat   /DATACENTER1/yuhang.tang/shell_test/a.txt

2.以<改变标准输入>

command <file 将command的标准输入修改为file

cat </DATACENTER1/yuhang.tang/shell_test/a.txt> /DATACENTER1/yuhang.tang/shell_test/b.txts
#这条命令将复制啊a.txt到b.txt下,输出重定向,从a.txt读入,输出到b.txt
#如果没有b.txt 会自动创建,已有则会覆盖,原来数据丢失

3.以>>追加文件

command>>file 可将command的输出追加到文件file末尾

#依次读取啊a.txt文件的每一行
for line in /DATACENTER1/yuhang.tang/shell_test/a.txt
do 
   echo  $line >> /DATACENTER1/yuhang.tang/shell_test/b.txt    #把每一行追加到b.txt中
done

head:显示一个文件或多个文件的前几行或前几个字节(默认显示前10行)

函数
  • 位置参数是函数私有的

  • 局部变量local ,不会影响函数外同名变量

    if/else语句

if condition
then 
    statements
 [elif condition
 then statements...]
 [else
 statements]
fi

逻辑操作

  • 与 &&
  • 或 ||
  • 非 !

NOTE:用中括号做判断时,"[“和”]"前的空格是必须的

if  test "2>3"
then
   .....
fi
///////////////////////

if  test [ 2>3 ]    #注意空格
then
   .....
fi
for循环
语法:
for name [in list]   #遍历list中所有对象
do 
  ...
done

、、、、、、、、、、、、、、、、、、、、、、
for file in 'find . -iname "*.mp3"'      #遍历当前目录中的所有MP3文件
do 
    mpg123 $file                     #mpg123是命令行程序,播放MP3文件
done
while/until循环
while condition
do
   ststement
done
正则表达式

正则表达式是描述某种匹配规则的工具。用一串符号描述共同属性的数据

运算符含义
\w匹配任何单词组成字符,
\W匹配任何非单词组成字符
< >匹配单词的开头和结尾
\b匹配单词开头和结尾处所找到空字符串
\B匹配两个单词祖成字符间的空字符串

正则表达式的语法格式

#grep [选项] ‘正则表达式’ 文件列表 -

#前置命令 |grep [选项] ‘正则表达式’

默认输出与表达式匹配的行

  • 以行为处理单位
  • 对数据按先后顺序逐行处理
  • 处理完当前行后,自动处理下一行,直到末行为止
  • 默认输出与表达式匹配的行
基本元字符
  • ^匹配字符 ——匹配行首

  • 匹配字符$ ——匹配行尾

  • . ——匹配任意单个字符。换行符\n 除外

  • ——匹配任意次数。(零次到多次)
  • ? ——最多匹配一次(0次或1次)
  • +——至少匹配一次(一次或多次)

  • [] ——匹配范围内的任意一个字符

grep ^we  /DATACENTER1/yuhang.tang/shell_test/a.txt
>we
>wery
>we
^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
?匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。
\d匹配一个数字字符。等价于 [0-9]。
x|y匹配 x 或 y。
[xyz]字符集合。匹配所包含的任意一个字符,即任何x或y或z的字符集合
[^xyz]负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’、‘l’、‘i’、‘n’。
[a-z]字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
文本排序
$ sort -d a.txt    #排序规则ASCII
1.txt
2
46
86
ihao
nihao
redirect to file
txt
we
we
wery
sort -d -f -u fruits.txt  #-d标志忽略特殊字符,-f标志忽略大小写差异,-u告诉sort命令去除选项中的重复行
文本去重
uniq命令删除文件中的重复行
-c    在输出行前加上每行在输入文件中出现的次数
-d    仅显示重复行
-u    仅显示不重复的行
统计文本字数,行数,字符数
wc  /etc/psswd           #显示了该文件有54行 75个单词以及2477个字符
>>>54  75  2477 /etc/passwd   

-c  参数含义是让wc命令显示字符的个数
-w  参数显示单词的个数
-l  参数显示文件文本行的行数

打印和格式化输出
  • 使用pr打印文件:这个工具的一个基本用途就是将较大的文件分割成多个页面,并为每个页面
  • 使用fmt编排文本文件
  • 使用fold限制文本宽度
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值