博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell 编程
阅读量:7188 次
发布时间:2019-06-29

本文共 2039 字,大约阅读时间需要 6 分钟。

阅读目录

1. echo 参数

  • -n 不换行(默认换行)
  • -e 使得转移字符有效

例子

ss='abc\n'echo -e  $ssabc           #换行起作用echo $ssabc

2. 赋值

2.1 =左右两侧不要带空格

a = "hello" #错误a="hello"

2.2 左边变量名不可加$

$a='134'[jihite]$a=$a'abc'[jihite]$echo aa[jihite]$echo $a134abc

 

3. shell运算

b=4let "c=$b+1"echo $c

小例

i=9000while [ $i -lt 9010 ]do    let "i=$i+1"    echo $idone
1
2
3
4
5
6
7
8
9
10
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010

4. 单引号和双引号区别

单引号和双引号一样都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外。

举例

bb="hello"echo "$bb"helloecho '$bb'$bb

注意ecoh -e 'bbbb′结果还是bb,因为'$bb'就是字面值,不会转义。

5. 数组

5.1 声明、定义

  • array['a']=1
  • array=('a', 'b')
  • array=([1]='a' [2]='b')

5.2 访问

  • echo ${array['a']}
  • echo ${array[0]}

5.3 遍历

for var in ${array[*]}do    echo $vardone

5.4 数组长度

num=${#array[@]}

对比:获取字符串长度:num=${#str}

6. Linux shell实现多线程

for ((i=0;i<5;i++)); do{    sleep 3;    echo "hello" $i}donewait

对比

for ((i=0;i<5;i++)); do{    sleep 3;    echo "hello" $i}&donewait

这个在上面的基础上多加了一个后台执行&符号,此时5个循环任务并发执行,最后需要3s多一点的时间(效果非常明显)。wait的作用是完成后台所有的任务后才往下执行,否则程序本身会等待。

7. 去除一行最后的'\r'

字符串最后有个'\r'是非常恶心的,可以通过tr命令去掉

a="hello\r"echo $a | tr -d '\r'hello\recho $a | tr -d "\r"hello\recho -e $a | tr -d '\r'hello  #转移字符起作用echo -e $a | tr -d "\r"hello

8. 编译shell文件

1
bash -x ***.sh

+开头的是编译的中间过程,不带+的为正常的输出。效果非常明显。 

9. if else

#!/bin/bashproc=$1proc_num=`ps -ef | grep root | grep $proc | wc -l`echo $proc_numif [ $proc_num = 2 ]then exit 0else exit 2fi

:if [ con ], 条件con和[]之间有空格

  • -ne —比较两个参数是否不相等
  • -lt —参数1是否小于参数2
  • -le —参数1是否小于等于参数2
  • -gt —参数1是否大于参数2
  • -ge —参数1是否大于等于参数2

   e.g.    if [ $proc_num -gt 1 ]

以上为数字的比较,字符串的比较用'='、'!='。e.g.

rev=$(cat /etc/ld.so.conf | grep usr/local/lib)if [[ $rev != '/usr/local/lib' ]]then        echo "hello"fi

10. for循环

例1:

  • sleep 1    睡眠1秒
  • sleep 1s    睡眠1秒
  • sleep 1m   睡眠1分
  • sleep 1h   睡眠1小时

例如:以下shell脚本每隔10秒钟就打印出“Hell, dansir”

#!/bin/shellwhile   truedo   echo "Hello, dansir"   sleep 10sdone

例2:

ids="123456789"for i in $idsdo    echo $idone

执行

$sh del.sh123456789

11. 执行变量里的命令

$(eval  echo $v_endcomm)

 

本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3969130.html,如需转载请自行联系原作者

你可能感兴趣的文章
Golang walk在win及linux建立 GUI 應用程式
查看>>
Linux执行命令常见的英语语句
查看>>
elasticsearch简单JavaAPI总结
查看>>
线索化二叉树
查看>>
vimrc
查看>>
【Spark亚太研究院系列丛书】Spark实战高手之路-第一章 构建Spark集群(第四步)(1)...
查看>>
Perl语言之统计特定字符串个数
查看>>
Linux用户和组管理
查看>>
Eclipse中从svn上检出项目无法识别jar包
查看>>
shell实现FTP自动批量上传下载文件
查看>>
我的友情链接
查看>>
Mybatis使用存储过程以及原理
查看>>
通讯录二维码使英文变为中文
查看>>
快2012了!
查看>>
【Objective-C】OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)
查看>>
maven打包包含配置文件
查看>>
C# readonly与const比较
查看>>
我的友情链接
查看>>
我的大学n糊口
查看>>
设置easyUi弹出窗在弹出框(iframe)中不居中问题
查看>>