常用变量的定义

//定义变量、获取变量值(数值型)
$ a=1
$ echo ${a}
1
//定义变量、获取变量值(字符串)
$ a="hello world"
$ echo ${a}
hello world
//$?代表上一条命令返回状态:0代表true,非0代表false
$ echo $?
0
//String变量中引用其它变量,本变量要用双引号,非单引号
$ m="wanglihong"
$ n="what is your name? ${m} "
$ echo ${n}
what is your name? wanglihong
//数组定义用小括号表示
$ a=("aaaaa" "bbbbb" "cccc")
$ a=(1 2 3 4 5)
//遍历数组用法
$ echo ${a[*]}
1 2 3 4 5
//获取数组长度用法
$ echo ${#a[*]}
5
//反引号用于将linux命令返回值赋给变量接收
//字符串变量
$ a=`ls`
$ echo ${a}
Applications Library System Users Volumes bin cores dev etc home opt private sbin tmp usr var
//数组变量
$ a=(`ls`)
$ echo ${a}
Applications
$ echo ${a[*]}
Applications Library System Users Volumes bin cores dev etc home opt private sbin tmp usr var
//先执行ls命令再执行echo命令
$ echo my directiry is `ls`
//双括号是对变量进行操作,(())是整数扩展,把里面的变量当成整数处理
$ a=1;b=2
$ echo $((a+b))
3
//$(())变量表达式只能计算除数和被除数均为整数且余数为整数的除法;
//涉及小数的除法用下面的awk方式
$ awk 'BEGIN{print 2/3}'
0.666667
$ awk 'BEGIN{print 3/4}'
0.75
$ awk "BEGIN{print ${a}/${b}}"
//字符串截取(从去掉前五个开始截取,往后取4个)
$ a="This is a beautiful girl"
$ echo ${a:5}
is a beautiful girl
$ echo ${a:5:4}
is a
//获取字符串长度(变量前加#号)
$ echo ${#a}
//获取数组长度(必须加[*])
$ echo ${#a[*]}
//从头匹配第一个指定字符并截取打印后面字符串
$ a="hello from testerhome"
$ echo "${a#*o}"from testerhome
$ echo "${a#*from}"testerhome
//从头开始匹配直到匹配到最后一个指定字符并截取打印后面字符串
$ echo "${a##*o}"
me
//从尾部开始匹配直到匹配到第一个指定的字符并截取打印前面的字符串
$ echo "${a%o*}"
hello from testerh
//从尾部开始匹配直到匹配到最后一个指定字符并截取打印前面的字符串
$ echo "${a%%o*}"
hell
//关系运算语法(注意格式:[]中空格隔开)
$ [ 3 -eq 3 ];echo $?
0
$ [ ! 3 -eq 3 ];echo $?
1
$ [ 4 -gt 3 ];echo $?
0
$ [ 4 -ge 3 ];echo $?
0
$ [ 4 -lt 3 ];echo $?
1
$ [ 4 -le 3 ];echo $?
1
$ [ 4 -le 3 -o 5 -ge 1 ];echo $?
0
$ [ 4 -le 3 -a 5 -ge 1 ];echo $?
1
//字符串替换(from替换成to)
$ echo ${a}
hello from testerhome
$ echo ${a/from/to}
hello to testerhome
//特殊格式(制表符和换行符)加-e
$ echo -e "aaaaaaa\nbbbbbbbbb"
aaaaaaa
bbbbbbbbb
$ echo -e "aaaaaaaaa\tbbbbbb"
aaaaaaaaa   bbbbbb
//判断文件是否存在
//-e:文件是否存在;-f:文件是否为普通文件;-d:文件是否是文件夹
$ [ -e jmeter.log ];echo $?
0
$ [ -f jmeter.log ];echo $?
0
$ [ -d jmeter.log ];echo $?
1

流程控制语句

#if语句
finup$ if [ 3 -gt 2 ];then echo success;else echo failure;fi
finup$ if((3>2));then echo success;else echo failure;fi
finup$ if [ ${a} -gt ${b} ];then echo successful;else echo failure;fi
finup$ if [ -e jmeter.log ];then echo "文件存在";else echo "文件不存在";fi
#for循环
$ for i in ${arr[*]};do echo ${i};done
$ for((i=0;i<${#arr[*]};i++));do echo ${i};done
$ for i in `ls`;do echo ${i};done
//下面两种方式等价
$ i=0;while((i<10));do echo ${i};((i++));done
$ i=0;while [ ${i} -lt 10 ] ;do echo ${i};((i++));done
# while循环
finup$ i=0;while [ ${i} -le 2 ];do echo ${i};((i=i+1));done
0
1
2
//while read读取文件,“<”是输出重定向;">"是输入重定向,如echo "hello world" > test.txt
finup$ while read i;do echo ${i};done <jmeter.log
//read命令读取键盘输入数据
finup$ read v;echo ${v}
finup$ read -p "enter:" v;echo ${v}
enter:44444444
44444444
# for循环与if综合:
for i in *;do echo ${i};if [ -f ${i} ];then break;fi;done
for x in *;do echo ${x};if [ -f ${x} ];then echo ${x} is a file;else continue;fi;done

shell运行环境概念

//{}代表在当前shell中运行
{ m=8;echo ${m}; };echo $m
//()代表在子shell中运行
$ (m=1;echo ${m})
//echo $$代表返回当前shell的pid,bash命令进入子shell
$ echo $$
10972
$ bash
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ echo $$
13182
//前者是覆盖输入;后者是追加输入
echo "hello from world!" > test.txt
echo "hello to world!" >>test.txt
//四个常见的预定义变量:linux系统提前定义好的;PATH变量中":"冒号与window环境变量中的分号";"作用相同,分隔变量
$ echo $PATH
输出: /Users/configSoftWare/apache-maven-3.6.2/bin:/usr/local/mysql/bin
$ echo $USER
输出: finup
$ echo $PWD
输出: /var
$ echo $HOME
输出: /Users/finup
//自定义创建可执行文件.sh,通过bash命令执行文件中的指令并输出
$ cat wulala
echo "hello from testerhome!"
ls -lh
$ bash wulala
hello from testerhome!
total 2
drwxr-xr-x    3 finup  staff    96B  8 25 16:01 AndroidStudioProjects
-rw-r--r--    1 finup  staff    29K  7 17  2020 AppiumProject.zip
drwx------@   3 finup  staff    96B 11  9 17:57 Applications
drwx------@  29 finup  staff   928B  1 26 10:22 Desktop
/**
grep从指定文件中匹配指定内容并打印;
"-i":忽略大小写;
"-o":精确匹配内容,不带o默认显示所在行内容;
"-v":不显示指定对象所在行
"-C2":显示指定匹配对象上下文所在行内容,默认显示上下各两行,可以为C3、C4等
"-A2":显示指定匹配对象后面两行内容(After)
"-B2":显示指定匹配对象前面两行内容(Before)
*/
$ grep -i "hello" wulala.txt
hello to testerhome
HELLO TO TESTERHOME
$ grep -io "hello" wulala.txt
hello
HELLO
ps -ef | grep bash | grep -v grep
cat demo.log | grep -C2 503
//其中"|"是管道符
$ cat wulala.txt | grep -i "hello"
hello to testerhome
HELLO TO TESTERHOME
//"."代表匹配任意一个字符;".*"匹配一个或多个字符
$ cat wulala.txt | grep -o "c."
$ cat wulala.txt | grep -o "c.*"
//curl高级用法,grep匹配正则表达式,*代表匹配0次或多次
$ while read x;do curl -s http://www.baidu.com/s?wd=${x};done<demo.txt | grep -o "结果约[0-9,]*"
//awk:数据切片,通过-F指定分割符对内容进行分割输出
$ echo "123|456|789"|awk -F '|' '{print $3}'
$ echo "aaaaa_bbbbbb_ccccc_dddd" | awk -F '_' '{print $4}'
$ cat passwd | awk -F ':' '{print $1}'
$ cat passwd | awk -F ':' '{print $1,$6}'     //打印出的第1列和第6列以空格隔开$ cat passwd | awk -F ':' '{print $1"\t"$6}' //打印出的第1列和第6列以制表符号隔开
 $ curl -s http://www.baidu.com/s?wd=mp3 | grep -o "结果约[0-9,]*" | awk -F '个|约' '{print $2}'//-s静默模式;-A用户代理;-b代表cookie信息curl -s -b "device_id=web_HyXwYokKD; channel=1141" -A "Mozilla/5.0...Safari/537.36" https://danju.com/dj
//awk输出结果去除空行使用{if(length !=0) print $0}参数$ curl -s https://www.jianshu.com/u/b1486d9b1588 | awk -F '<a class="title" target="_blank" href' '{print $2}' | awk -F '">' '{print $2}' | awk -F '</a>' '{print $1}' | awk '{if(length !=0) print $0}'
//sed:文本替换,+号替换成_号,以s开头,以g结尾代表全部替换,不写g只替换第1个$ echo "aaa+bbb+ccc" | sed 's/+/_/g'
输出:aaa_bbb_ccc$ sed 's/任意花api接口/蒙牛智网接口清单/g' jmeter.log    //只替换暂存区,不会更新原始文件$ sed -i.bak 's/任意花api接口/蒙牛智网接口清单/g' jmeter.log  //"-i"会覆盖源文件,"-i.bak"会备份原文件后缀以bak结尾,可自定义
# vim创建文件demo.bash,并填写函数如下;保存后,chmod +x demo.bash,在命令行中执行demo.bash即可执行文件中的函数goFunction(){echo "this is a testing case,please skip it"read -p "Enter var_a:" var_aread -p "Enter var_b:" var_bif [ ${var_a} -eq ${var_b} ]thenecho "var_a等于var_b"elif [ ${var_a} -gt ${var_b} ]thenecho "var_a大于var_b"elseecho "var_a小于var_b"fi
}
goFunction
# awk、grep、curl、for及``的综合应用:统计网站文章列表中每篇文章里面的点赞数
a=`curl -s https://testerhome.com/topics | grep -o 'href="/topics/[0-9]*"' | awk -F '"|/' '{print $4}'`;
for id in ${a};do url='https://testerhome.com/topics/'${id};
inside=`curl -s ${url} | grep -m 1 -o '<span>[1-9][0-9]* 个赞</span>' | awk -F '<span>|</span>' '{print $2}'`;
echo 该篇文章的id为:${id},点赞数量为:${inside};done
/**
BEGIN代码块:(BEGIN后面第一个花括号)
在读取文件之前执行,且执行一次
在BEGIN代码块中,无法使用$0或其它一些特殊变量
main代码块:(BEGIN后面第二个直到END之前的花括号)
读取文件时循环执行,(默认情况)每读取一行,就执行一次main代码块
main代码块可有多个
END代码块:
在读取文件完成之后执行,且执行一次
有END代码块,必有要读取的数据(可以是标准输入)
END代码块中可以使用$0等一些特殊变量,只不过这些特殊变量保存的是最后一轮awk循环的数据
*/
$ echo -e "1|2|3\n4|5|6\n7|8|9" | awk -F '|' 'BEGIN{a=0}{a=a+$2}END{print a}'
//获取公网IP地址
curl icanhazip.com
/**
执行下面命令并输出:
$0变量读取的是demo.sh本身,
$1读取的是demo.sh之后的第一个参数;
$2读取的是demo.sh之后第二个参数;
$#代表的是demo.sh之外的参数个数;
$*代表的是传入的参数名称
第10个及以上${10}括起来,否则读取不到
*/
demo.sh a b c d e
获取脚本参数:demo.sh
获取第一个参数:a
获取第二个参数:b
获取参数个数:5
获取参数:a b c d e
获取参数:a b c d e//demo.sh文件中定义下面参数
echo "获取脚本参数:$0"
echo "获取第一个参数:$1"
echo "获取第二个参数:$2"
echo "获取参数个数:$#"
echo "获取参数:$*"
echo "获取参数:$@"//demo.sh文件中脚本awk引用变量要用\"${var}\"表示read -p "please enter number m:" mread -p "please enter number n:" necho m+n=$((m+n))echo m-n=$((m-n))
echo m*n=$((m*n))
echo `awk "BEGIN{print \"$m\"/\"$n\"}"`

Linux shell 基础语法相关推荐

  1. Linux Shell 基础语法 流程控制 逻辑运算 字符串操作详细解析

    文章目录 1 shell 简单入门 1.1 shell分类 1.2 shell脚本 1.3 Shell 脚本四种启动方式 2 shell 变量 2.1 普通变量 2.1.1 定义变量 2.1.2 变量 ...

  2. linux shell 基础 使用日志与心得

    linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现 #!/bin/bash是指此脚本使用/bin/bash来解释执行. 其中,#!是一个特殊的表示符,其后,跟着解释 ...

  3. 一、Linux Shell基础

    1.1.shell基础 Bash 是一个与Bourne Shell兼容的.执行从标准输入设备文件读取的命令的语言解释器.Bash是Bournae-Again Shell的缩写.Bash与原来的Unix ...

  4. linux 运行class文杰,Linux Shell基础知识,你想的到的都在这里

    小编提示:此篇文章阅读时间为15分钟左右,可先收藏后阅读. 01/Linux 的江湖地位 Linux 作为一个全球用户超过14亿的操作系统,它的强大与神奇就不必多说了,混在IT界 Linux是可以装B ...

  5. shell基础语法以及监控进程不存在重启

    转码 # dos2unix ./test.sh 权限 # chmod a+x ./test.sh 语法 变量 var="111" echo $var echo ${var} 运算 ...

  6. linux shell awk 语法

    引用:http://blog.csdn.net/weekly123/article/details/1465675 inux shell awk 语法     Awk 是一种非常好的语言,同时有一个非 ...

  7. 【SHELL】 Linux SHELL 脚本语法及使用参考

    Linux下的SHELL脚本常以 *.sh 为后缀,和Windows下的批处理脚本 *.bat *.cmd功能一致,但是功能和语法都要更强大.SHELL是一门脚本语言.本文介绍SHELL的语法及用法. ...

  8. Linux shell编程语法

    shell是什么 shell 是一个命令行接收器,它为Linux用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动,挂起,停止甚至是编写一些程序. sh ...

  9. UNIX和Linux Shell正则表达式语法介绍

    一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串 ...

最新文章

  1. oauth2 增加token 返回参数_RingCentral Tech | OAuth2.0面面观
  2. Java 语言 集合架构(Set规则集)
  3. bzoj 1924: [Sdoi2010]所驼门王的宝藏
  4. iOS自动化探索(九)使用Jenkins自动化打包并发布iOS App
  5. sql server 链接服务器 改访问接口_跨服务器链接数据库?其实很简单!(上)
  6. PLSQL Developer 运用Profiler 分析存储过程性能
  7. Vim删除文件到行首或者行尾
  8. 解决mysql不能远程登入的问题
  9. video标签详解(转载)
  10. 如何控制局域网网速_免费局域网监控软件如何提升控制性能 - 百科
  11. 嵌入式工程师有发展前途吗?
  12. jmeter性能测试实战——基础篇
  13. 网站seo运营中如何精确预测热门搜索关键词?
  14. 无法支持计算机上的硬件,win7“不支持的硬件,你的电脑使用的处理器专为最新版win...
  15. Couldn‘t resolve host
  16. 5G差异化业务场景需求及网络切片(1)
  17. JAVA算法(四平方和)
  18. Object.assign()方法
  19. android 金额输入弹窗,金额输入框_小罗的安卓学习记录的技术博客_51CTO博客
  20. 水煮旅途之“天山夜话”

热门文章

  1. js setTimeout()的使用
  2. Linux 中执行命令
  3. 根据字段的不同内容分类汇总 - 球队的胜负次数统计
  4. NetBeans 时事通讯(刊号 # 124 - Nov 11, 2010)
  5. Server Core十大安装设置命令
  6. 流浪:从南海到北海,面朝大海,春暖花开。
  7. 【指标统计】MsgProxy消息代理配置
  8. Haproxy+Heartbeat 高可用集群方案操作记录
  9. 对比两个表中,字段名不一样的SQL
  10. 【项目总结】之——导出Excel