linux高级命令字符处理shell编程.docx
- 文档编号:27733337
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:21
- 大小:20.42KB
linux高级命令字符处理shell编程.docx
《linux高级命令字符处理shell编程.docx》由会员分享,可在线阅读,更多相关《linux高级命令字符处理shell编程.docx(21页珍藏版)》请在冰豆网上搜索。
linux高级命令字符处理shell编程
目录操作
pwd
cd
mkdir-p
rmdir
rm-rf
文件操作
ls-hl
touch
echo"abc">>a.txt
cat,more,less,tail,head
vi
find路径模式
用户管理
useradd
userdel
usermod
/etc/passwd
权限管理
chmod权限信息文件/目录
*目录必须有x权限
chown用户名文件/目录
chgrp组名文件/目录
组
groupadd
groupdel
打包
tar
-c
-v
-f
-z
-x
tar-czvftest.tar.gztest-->打包并压缩
tar-xzvftest.tar.gz
系统命令
ps-aef
top
free-m
kill-9pid
---------------------------------------------------------------------
正则表达式
用一个字符串(正则表达式)去描述另外一个字符串的特征.
Linux
管道:
前面命令的输出作为后面命令的输入
grep--》根据关键字查找一个文档
grep正则表达式输入
echo"helloworld"|grep"hello"--》成功
echo"helloworld"|grep"abc"-->失败
**Linux里面$?
表示上条命令执行成功还是失败
0--》成功
非0--》失败
正则表达式
.-->任意一个字符
+→一个或多个字符
*—>0个或多个字符
c.t:
catcut
[]-->代表一个范围,N选1
t[aeio]n
tan,ten,tin,ton
()-->代表一个整体
|-->或者
t(a|e|i|o|oo)n
tan,ten,tin,ton,toon
{}–>表现出现的次数
999-->[0-9]{3}
192-->[0-9]{1,3}
aaaaaaaaaaaaaaaaaaaaaaa-->[a]*,a+
特别注意:
由于Linux的原因,(),+,|,{},.,都得转义
练习:
999-99-9999
^[0-9]{3}-[0-9]{2}-[0-9]{4}$
[^0-9]-->不能是数字
\s-->表示空白
^在中括号里面,表示否
^在正则表达式开头,一般来说有的时候^表示开头$表示结尾(可以不写)
练习题:
电子邮箱的正则表达式
test_123@
[a-zA-Z0-9_]\+@[a-zA-Z0-9]\+\.\(com\|cn\|net\)
练习:
192.168.101.1
\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}
-------------------------------------------------------------
Linux字符串的处理
"abbbbcdefg"
"zhangsan|class1|20"
截取字符串
替换字符串
去重复的字符
拆分字符串
1、Cut
-b-->按字节取
-c-->按照完整的字取
-d-->分隔符
-f-->取第几个字段
举例:
1、"abcdefghijk"
截取从b-d,g-i的字符串
bcdghi
echo"abcdefghijk"|cut-b2-4,7-9,11
echo"你好"|cut-b1
2、"zhangsan|class1|20"
echo"zhangsan|class1|20"|cut-d"|"-f1
**cut命令分隔符,只能是单个字符
3、***
"abcdeSQL>bbbbbb"
如果需要用多个字符作为分隔符,那么cut就不行了,要用awk
awk-F"SQL>"'{print$2}'
练习:
ifconfigeth0,只显示ip地址
ifconfigeth0|grep"\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"|cut-d":
"-f2|cut-d""-f1
----------------------------------------------------------
tee
命令
结果保存到某一文件并输出到屏幕echo"helloworld123456"|teeabc.txt
tr命令
-d--删除一个或多个字符
echo"abcdefg"|tr-dbcd--》输出aefg
-s去重复
echo"abbbbbbcde"|tr-sb--》abcde
把一个字符转换成另一个字符
echo"abcdefg"|trbB-->aBcdefg
----------------------------------------------------------------
Shell编程
Shell:
人机交互的界面
最简单的赋值
LinuxShell里面没有类型,所有的东西都是字符串
变量=值
**注意:
=赋值号前后没有空格
a=10
代表a是一个命令=10是一个参数
a=10
10是一个命令,执行的结果赋值给a
a=10
a是一个命令,=和10作为参数
怎么引用变量的值?
$a
---------------------------------
什么是环境变量?
系统运行的时候,会从一些临时存储的变量里面取得需要的参数!
!
!
PATH--》保存所有默认命令的位置(路径)
/usr/lib/qt-3.3/bin:
/usr/local/sbin:
/usr/local/bin:
/sbin:
/bin:
/usr/sbin:
/usr/bin:
/root/bin
echo$PATH
系统环境变量
针对所有用户都有效的环境变量/etc/profile
用户环境变量
用户自己设置的环境变量家目录/.bashrc
---------------------------------------------------------
脚本,script:
就是一个命令的源代码ls
-----------------------
创建一个最简单的脚本
$0-->返回脚本的名称
$1-$9-->输入参数
$?
-->上一条命令执行成功还是失败
$#位置参数的个数"$*"所有的位置参数(作为单个字符串)*"$@"所有的位置参数(每个都作为独立的字符串)$$-->返回进程号
$*-->"100200"
$@-->"100""200"
--------
校验邮件地址,我只需要知道成功还是失败
echo"test@"|grep"[a-zA-Z0-9_]\+@[a-zA-Z0-9]\+\.\(com\|cn\|net\)">/dev/null
echo$?
/dev/null:
宇宙黑洞
---------
Linux如何产生随机数
$RANDOM
自定义产生一个范围
rnumber=$(((RANDOM%(max-min+divisibleBy))/divisibleBy*divisibleBy+min))
10~20
a=$(((RANDOM%(20-10+1))/1*1+10))
Linux如何产生随机字符串
概念:
Linux有一个随机设备/dev/urandom
head-1/dev/urandom|md5sum
------------------------------------
Shell的说明
规范:
每一个shell脚本第一行
#!
/bin/sh-->就是规定该脚本以bash的方式运行,如果不加,按照终端默认的shell执行
#在其他行,表示注释
""和''、没有引号的区别?
""代表局部引用
''原样输出
没有引号:
将空格压缩后输出
----------------------------------------------
在shell里面所有的变量都是字符串类型:
a=10-->字符串
b=20-->字符串
c=$a+$b-->10+20字符串
echo$c;
------
$a
cmd:
命令
expr:
表达式
$(CMD)
$((expr))
c=$((1+2));
算术表达式的几种做法:
$((expr))
c=`expr1+2`;`单撇
--------------
练习:
创建一个脚本,输入两个参数,完成加法,输出结果
./cal.sh12
3
#!
/bin/sh
num1=$1
num2=$2
rs=$(($num1+$num2));
echo$rs;
-------------------------------
2**32的三次方
---------------------------
命令:
效果:
Pleaseinputyourname:
[zhangsan]
zhangsan,你好
read-->默认从标准输入读入字符(直到回车位置)
read
-p-->“提示字符”
-t-->倒计时(秒)
-n-->只能输入N个字符
-s-->密码不回显
read-t5-p"Pleaseinputyourname"name;
read-n1-p"yes/no"choose;
脚本:
提示输入两个数,输出结果
Pleaseinputyour1stnumber:
Plaseinputyour2ndnumber:
2
Theresultis3
#!
/bin/sh
read-p"Pleaseinputyour1stnumber:
"num1;
read-p"Pleaseinputyour2ndnumber:
"num2;
rs=$((num1+num2));
echo"Theresultis$rs";
-------------------------------------------------
练习:
输入用户名,输入密码,最终把结果保存到文件user.list
user.list:
zhangsan:
123456
lisi:
99999
#!
/bin/sh
read-p"Pleaseinputyourusername:
"username;
read-s-p"Pleaseinputyourpassword:
"password;
echo"$username:
$password">>user.list;
--------------------------------------------
字符串的操作,查文档
-------------------------------------------
ifCOMMANDS;
then
...
elifCOMMANDS;
....
else
...
fi
ifls>/dev/null;
then
echo"ok";
else
echo"fail;
fi
---------------------------
如何进行数学逻辑运算
a=10;
a>5
str="hello";
test-n$str;-->成功
判断字符串
str1=str2
str1!
=str2
判断数字:
-eq-->等于
-ge-->大于等于
-gt-->大于
-le-->小于等于
-lt-->小于
-ne-->不等于
判断文件:
-e--》文件是否存在
-d--》文件是否存在,并且是一个目录
练习题:
输入一个数字,判断是否大于等于10,如果是,输出ok,否则,输出fail
read......num1;
iftestnum1-ge10;
then
echo"ok";
else
echo"fail";
fi
test--[]
test$num-gt5;
等价于
[$num-gt5];
**中括号前后有空格
&和&&区别?
条件1&条件2
执行判断(真)执行判断(真)--》真
执行判断(真)执行判断(假)--》假
执行判断(假)执行判断(真)--》假
执行判断(假)执行判断(假)--》假
条件1&&条件2--》短与
执行判断(真)执行判断(真)--》真
执行判断(真)执行判断(假)--》假
执行判断(假)不执行--》假
执行判断(假)不执行--》假
输入一个数字,判断是否在[10,20],如果是,输出ok,否则,输出fail
[$num1-ge10]&&[$num1-le20];
|和||
--------------------------------------------
文件的判断
练习:
用户输入一个路径
进行判断,判断该目录是否存在,
如果不存在,则显示“目录不存在”,自动建立目录
如果已存在,则显示“目录已存在”
PleaseInputyourPath:
/root/test
[-d$pathName]
-------------------------------------------
输入一个数字,判断是否是固定的几个数
1-->显示num1
2-->显示num2
*-->显示其他值
case变量in
值1)
语句;;
值2)
语句;;
*)
语句;;
esac
练习:
提示:
请输入您要执行的操作:
1、进入网站2、登录3、注册
1--》进入了网站
2-->登录操作
其他值--》非法操作
read-p"请输入您要执行的操作:
1、进入网站2、登录3、注册"oper;
case$operin
1)
echo"进入了网站";;
2)
echo"。
。
。
";;
3)
echo"....";;
*)
。
。
。
。
。
esac
-----------------------------------------------------
输入文件位置,校验这个文件的类型,并且输出这个文件的权限信息
前提:
确保文件存在-e文件名
1、通过ls-l文件名得到文件的详细信息
2、通过字符串处理,得到第一段权限信息
3、-rwxr-xr-x.,比较字符串
字符1-:
普通文件d:
目录
rwx-->文件拥有者的权限
。
。
。
vi的查找字符串
命令行模式下:
/关键字
n--》查找下一个
------------------------------------------------------------
循环
for循环
while循环
ShellFor循环
forfilein12345
do
语句
done
------
for((i=1;i<100;i++))
do
...done
-----
练习:
1、查找当前路径下有哪些文件,并且显示出来
1.1.sh
2.2.sh
i=i++;
2、计算从1+2+3.。
。
。
+100,的结果
#!
/bin/sh
sum=0;
for((i=1;i<=100;i++))
do
sum=$((sum+i));
done
echo$sum;
-----------------------------------------
whileCOMMANDS;
do
....
done
-------------
练习:
使用while循环,打印10到20
-------------------
XX文库-让每个人平等地提升自我
重定向
输出重定向
输入重定向
readline
XX文库-让每个人平等地提升自我
需求:
遍历user.list,加上行号
line1zhangsan:
123
line2lisi:
123
whilereadline;
do
done ------------------------ find.-name"*.sh"|grep"hello" 新的需求: find.-name"*.sh"并且内容包含auth的这个文件 find.-name"*.sh"|xargsgrep"auth"; xargs-->把前面的每一项都作为后面grep的一个参数 ./testfor.sh ./teatfor2.sh grep"auth"./testfor.sh ------------------------------------------------- 数组: 包含同一类元素的集合 1、Shell里面如何定义数组 arr=(数组元素,以空格分开); arr=(12345); 数组元素个数 #代表长度 ${#arr[@]} 2、查看具体下标的元素 ${#arr[@]} 练习题: 有一个数组 arr=(4,5,1,2,29) 通过循环遍历 4 5 1 2 29 arr=(451229) len=${#arr[@]}; for((i=0;i do echo${arr[i]} done ------------------------------------------------ 练习题: 随机产生10个数,放到数组arr中,遍历输出arr $RANDOM for((i=0;i<10;i++)) do arr[$i]=$RANDOM; done ----------------------------------------- 排序: 冒泡排序 arr=(98121); len=${#arr[@]}; for((i=0;i do for((j=0;j do if[${arr[j]}-gt${arr[j+1]}]; then tmp=${arr[j]}; arr[j]=${arr[j+1]}; arr[j+1]=$tmp; fi done done for((i=0;i do echo${arr[i]}; done vi 命令行方式 : setnumber-->显示行号 ---------------------- 方法,函数 模块化的,一些功能 function方法名() { } 方法名 exit--》立即强制结束当前程序 Linux的function,如果要使用return,记住,后面只能跟数字 --- 在脚本里面调用另外一个脚本的内容 **把另外一个脚本加载到本地 .==>source source其他地方的shell 如果函数非得返回一个字符串 echo结果 shell里面 return状态码 return和exit有什么区别? exit会理解结束当前程序 functionreg() { } user.list zhangsan: 123 $username: $password
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 高级 命令 字符 处理 shell 编程