本篇文章为你整理了Linux常用命令与shell脚本学习(linux命令和shell脚本)的详细内容,包含有linux命令行与shell脚本编程大全和鸟哥的私房菜 linux命令和shell脚本 linux常用shell操作指令 linux shell命令行及脚本编程实例详解 Linux常用命令与shell脚本学习,希望能帮助你了解 Linux常用命令与shell脚本学习。
route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1
配置静态路由到达⽹ 络192.168.0.0/16
方式1,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限;
方式2,本质是脚本自己需要执行,所以需要执行权限
多命令处理
在/tmp目录下创建一个test.txt文件,并在文件中写入1234567890
vi batch.sh
#!/bin/bash
cd /tmp
touch test.txt
echo "1234567890" test.txt
shell中的变量
常用系统变量
$HOME
$PWD
$SHELL
$USER
[root@mc ~]# echo $HOME
/root
[root@mc ~]# echo $PWD
/root
[root@mc ~]# echo $SHELL
/bin/bash
[root@mc ~]# echo $USER
自定义变量
定义变量:变量=值 等号两边不能留有空格
撤销变量:unset 变量
输出变量:echo $变量
声明静态变量: readonly 变量,注意:不能unset
变量定义规则
变量名称可以由字母,数字和下划线组成,不能以数字开头,环境变量名建议大写
等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
变量的值如果有空格,需要使用双引号或单引号括起来
可把变量提升为全局变量,可供其他shell程序使用
export 变量
#!/bin/bash
echo "helloworld!!!!"
echo $A
$n (描述:n为数字,$0代表脚本名称,10以内参数用$1-9 表示 , 10以上的需要用大括号包含 ,9表示,10以上的需要用大括号包含,9表示,10以上的需要用大括号包含,{10})
#!/bin/bash
echo "$0 $1 $2 $3"
$# (功能描述:获取所有输入参数个数,常用于循环)
#!/bin/bash
echo "$0 $1 $2 $3"
echo $#
$* 和$@
$* (描述:代表命令行中所有的参数,把所有参数看成一个整体)
$@ (描述:也代表命令行中所有的参数,不过把每个参数区分对待)
#!/bin/bash
echo "$0 $1 $2 $3"
echo $#
echo $*
echo $@
$? (描述:最后一次执行命令的状态,0:正确执行)
$((运算式)) 或 $[运算式]
expr +,-,*,/,% 加减乘除取余
expr运算符间要有空格
(2)if后要有空格
case 语句
#!/bin/bash
case $1 in
echo "成功"
echo "失败"
echo "未知"
echo "默认"
注意事项:
case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
双分号“;;”表示命令序列结束,相当于java中的break。
最后的“*)”表示默认模式,相当于java中的default。
for循环
从1加到100
#!/bin/bash
for((i=1;i =100;i++))
s=$[$s + $i]
echo $s
打印所有输入参数
#!/bin/bash
for i in $*
echo $i
比较$*和$@区别
$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。
#!/bin/bash
for i in $*
echo "* $i "
for j in $@
echo "@ $j"
当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。
#!/bin/bash
for i in "$*"
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
echo "* $i"
done
for j in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
echo "@ $j"
WHILE循环
从1加到100
#!/bin/bash
while [ $i -le 100 ]
s=$[$s + $i]
i=$[$i + 1]
echo $s
read读取控制台输入
read(选项)(参数)
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
变量:指定读取值的变量名
提示7秒内,读取控制台输入的名称
#!/bin/bash
read -t 7 -p "7秒内输入名称:" NAME
echo $NAME
basename基本语法
basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
# 用法一
[root@mc datas]# basename /root/datas/read.sh
read.sh
# 用法二
[root@mc datas]# basename /root/datas/read.sh .sh
dirname基本语法
dirname 文件绝对路径(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
[root@mc datas]# dirname /root/datas/read.sh
/root/datas
自定义函数
[ function ] funname[()]
Action;
[return int;]
funname
必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
sed [选项参数] ‘command’ filename
选项参数说明
删除cut.txt文件所有包含wo的行
sed /wo/d cut.txt
将cut.txt文件中wo替换为ni
sed s/wo/ni/g cut.txt
注意:‘g’表示global,全部替换
将cut.txt文件中的第二行删除并将wo替换为ni
sed -e 2d -e s/wo/ni/g cut.txt
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
选项参数说明
只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"。
awk -F : BEGIN{print "user, shell"} {print $1","$7} END{print "dahaige,/bin/zuishuai"} passwd
注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。
将passwd文件中的用户id增加数值1并输出
awk -v i=1 -F: {print $3+i} passwd
awk的内置变量
awk -F: {print "filename:" FILENAME ", linenumber:" NR ",columns:" NF} passwd
ifconfig eth0 grep "inet" awk -F t {print $2} awk -F " " {print $1}
查询cut.txt中空行所在的行号
awk /^$/{print NR} sed.txt
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
sort(选项)(参数)
vim常用快捷键
查看大图
grep常见用法
ls grep logs
查找文件(字符串)
ls grep "for"
# 查找wo
grep wo cut.txt
# 查找空格
grep " " cut.txt
查找多个字符串
grep -e wo -e zhen cut.txt
搜索包含两个连续的“d”字母的字符串
egrep -E d\{2} cut.txt
grep -E d\{2} cut.txt
[]括号用于匹配一组字符中的任何一个。
grep "[1358]" cut.txt
[-]括号可用于指定数字或字母字符范围
grep "[6-9]" cut.txt
^脱字符号用于搜索只出现在行的开头的模式
grep ^d cut.txt
带方括号的脱字符号用于从搜索模式中排除字符
grep "[^6-9]" cut.txt
$符号用于搜索只出现在行的末尾的模式
grep "9$" cut.txt
** or条件**
grep -E 89 cut.txt
egrep 89 cut.txt
忽略大小写 -i
grep -i dong cut.txt
搜索时区分大小写
如果我们要搜索一个字符串,其中第一个可以是大写或小写,但字符串的其余部分应该是小写怎么办?在这种情况下,无法使用-i 忽略大小写,所以一种简单的方法是使用方括号。
grep [Dd]ong cut.txt
带行号 -n
grep -n wo cut.txt
输出前后行 -C
输出之前行-B
输出之后行-A
grep -A 1 la cut.txt
grep -B 1 la cut.txt
grep -C 1 la cut.txt
对结果排序
grep "[6-9]" cut.txt sort
多文件查找-l与-L
# 包含使用-l
grep -l bash *.sh
# 不包含使用-L
grep -L bash *.sh
通过使用 和 来准确匹配到了 bin 这个词
grep "\ bin\ " /etc/passwd
以上就是Linux常用命令与shell脚本学习(linux命令和shell脚本)的详细内容,想要了解更多 Linux常用命令与shell脚本学习的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。