Linux命令学习20171013
来源:互联网 发布:淘宝怀轩旗舰店真假 编辑:程序博客网 时间:2024/04/28 06:12
1.shell中变量的赋值和引用
变量名规则:
(1)首个字符必须是字母(a-z,A-Z)
(2)中间不能有空格,可以有_
(3)不能使用标点符号
(4)不能使用关键字(可以使用help命令查看保留关键字)
变量使用:
(1)变量名=值
(2)取一个变量值,只需要在变量前加$
脚本1.sh
#!/bin/ksh
#变量赋值
a="dingguanyi"
#打印a的值
echo"a is:" $a
赋权:chmod +x 1.sh
执行脚本:./1sh
a is:dingguanyi
有时候变量可能和其他字符混淆,我们${变量名}来取值变量,如下例,$numnd会去搜索变量numnd,而我们没有定义变量numnd,打印为空
脚本2.sh
#/bin/ksh
num=2
echo "this is the $numnd"
echo "this is the ${num}nd"
赋权:chmod +x 2.sh
执行脚本:./2.sh
this is the
this is the 2nd
2.常用命令
(1)wc -l filewc -w file wc -c file
分别计算文件的行数(line)单词数(word)字符数(character)
(2)cut -bcolumn file
cut -b 1-2 file输出文件每行1-2字符的内容
(3)read var
提示用户输入,并将输入内容赋值给var
(4)sort file
对文件所有行进行排序,并打印
(5)uniq
输入文件中内容不一致的行,去重,例如:sort file | uniq
(6)basenamedirname
返回不包含路径的文件名:basename /dingguanyi/1.sh 返回1.sh
返回文件所在路径:dirname /dingguanyi/1.sh 返回/dingguanyi
(7)head/tailfile
打印文件开头几行:head -1 1.sh > 3.sh
打印文件末尾几行:tail -1 1.sh > 4.sh
(8)sed查找替换
将文件1.txt中的D全部替换为A并输出到文件2.txt:cat 1.txt | sed 's/D/A/g' > 2.txt
(9)awk文本处理
取最近5次登录系统的用户:last -n 5
取最近5次登录的用户和登录的ip以#分割:last -n 5|awk -F ' ' '{print$1"#"$3}'
(10)管道:|将一个命令的输出作为另外一个命令的输入
计算文件中包含A的行数:grep "A" 1.del|wc -l
(11)重定向>写入文件并覆盖旧文件,>>追加写入文件
(12)文件压缩解压:压缩是将一个大的文件通过压缩算法变成个小文件
压缩:gzip 1.del
解压:gzip -d 1.del.gz/gunzip 1.del.gz
压缩:bzip2 1.del
解压:bzip2 -d 1.del.bz2/bunzip2 1.del.bz2
(13)文件归档:归档打包则是将一大堆文件或者目录变成一个总的文件
归档:tar -cvf 1.tar 1.del 2.del
解归档:tar -xvf 1.tar
(14)反短斜线可以将一个命令的输出作为其他命令的命令参数:`
将文件夹下过去24小时内修改过的文件打包:tar -cvf cs.tar `find ./ -mtime -1 -type f`
3.shell中的流程控制
(1)if语句
If ...;
then ...
else ...
fi
脚本3.sh
#!/bin/ksh
if [ "$SHELL" = "/usr/bin/bash"];
then echo "you login shell isbash"
else echo "you login shell is not bashbut $SHELL"
fi
关系或与
目录下有1.del则打印:[ -f "./1.del" ]&& echo "this is 1.del"
(2)case语句
case可以用来匹配一个给定的字符串,而不是数字
case...in...)
do something here;;
esac
脚本4.sh
运行脚本,解压文件 ./4.sh 1del.gz
#!/bin/ksh
ftype=`file "$1"`
case "$ftype" in
"$1: tar archive"*) tar -xvf"$1";;
"$1: gzip (.gz) compresseddata"*) gunzip "$1";;
"$1: data or International Languagetext"*) bunzip2 "$1";;
*) echo "File $1 can not beuncompressed with smartzip";;
esac
(3)select语句
适用于交互场景,用户可以从一组不同的值中进行选择
脚本5.sh
#!/bin/ksh
echo "What is your favourite OS?"
select var in "Red Hat""CentOS" "Ubuntu" "Fedora" "Other";do
break
done
echo "You have selected $var"
(4)while/for循环语句
脚本6.sh
#!/bin/ksh
for var in A B C;
do echo "var is $var"
done
4.shell中的特殊符号
(1)引号
作用:防止通配符和变量的拓展。所谓的拓展就是指程序会把通配符(比如*)替换成适当的文件名,把变量替换成变量值。
touch 1.jpg 2.jpg
echo *.jpg
以上语句输出:1.jpg 2.jpg(其中*拓展为任意多个字符变为1和2了)
引号(单引号和双引号)可以防止通配符*的拓展:
echo "*.jpg"
echo '*.jpg'
运行结果为:
*.jpg
*.jpg
其中单引号更严格,可以防止变量拓展;而双引号可以防止通配符拓展但允许变量拓展:
echo $SHELL
echo "$SHELL"
echo '$SHELL'
运行结果为:
/usr/bin/ksh
/usr/bin/ksh
$SHELL
还有一种防止拓展的方法,即使用转义字符:反斜杠\
echo \*.jpg
echo \$SHELL
运行结构:
*.jpg
$SHELL
(2)Heredocument
用法:将两个delimiter之间的内容(here document connect)传递给cmd作为输入参数
注意:A.delimiter只是个标识而已,可以替换成任意合法字符 B.作为结尾的delimiter一定要顶格写,前后不能有任何字符和空格
cmd << delimiter
here documentconnect
delimiter
脚本7.sh
#!/bin/ksh
cat << help
EXAMPLE:mv file1 file2
help
- Linux命令学习20171013
- Linux学习-Linux命令
- Linux 命令学习 -wc命令
- linux学习命令--sed命令
- LINUX命令学习笔记
- linux命令学习
- Linux命令学习 DD
- linux命令学习
- Linux 命令学习笔记
- linux命令学习
- linux命令学习一
- linux学习命令
- linux终端命令学习
- Linux 命令学习
- Linux 基础命令学习
- linux 命令学习
- linux学习笔记--命令
- linux命令学习
- GMIS 2017 大会刘维演讲:跨越国界,智能机器时代的全球化
- GMIS 2017大会Saman Farid演讲:人工智能时代创业者面对的挑战和机会
- GMIS 2017 大会简仁贤演讲:人机对话,从猜测、概率到理解
- linux移植过程概述(linux移植的全局认识并非step by step的教程)
- 套接字Socket
- Linux命令学习20171013
- GMIS 2017圆满闭幕,全面解读前沿研究、产业落地及AI全球化
- Java应用OpenCV指南其三:OpenCV中的图像操作
- AI 投资人Lan Xuezhao的投资逻辑:我关注进入市场的方式、公司的定位和规模
- 清华大学朱军详解珠算:贝叶斯深度学习的GPU库(附视频)
- 在 AI 创业的好时代,初敏结束 8 年阿里生涯加入思必驰
- 伯克利教授Stuart Russell:人工智能的过去、现在和未来
- duilib-封装win32控件
- 如果你变成一个程序员……