shell编程基础二

1,获取命令执行的结果,字符串拼接(脚本最常使用的功能)

 法一:

cmd_result=$(date +%Y%b%d)        //使用变量获取命令执行的结果或者 cmd_result=`date +%Y%b%d`   反引号

 

mysqldump -uroot -pfeng --all jiale>/root/jiale$cmd_result.sql    //执行字符串和变量拼接,也可以使用${cmd_result}

 

法二:

name="aaa"

one="hello,$name"

echo $one

 

从文件中获取数据并拼接成字符串:

item=""

for num in $(cat health_item.txt);do item="$item,$num";done

echo $item

 


2.使用#来注释,以及脚本执行的方法

脚本的开头一般是

#!/bin/sh

因为脚本前两个字符一般是#!,系统会将这两个字符之后的字符作为执行脚本的命令解释器的绝对路径(也可以是其他脚本解释器的路径)

脚本执行的三个方法

1chmod  u+x  脚本名        //给脚本执行权

         ./脚本名

2bash  脚本名                     //直接使用shell启动命令一般比上面的方法要慢一些

         sh  脚本名

3)使用bash内部命令source“.”运行脚本

        source  脚本名

        . 脚本名               //“.”之后必须有一个空格


 

3,I/O重定向,管道(|)和后台运行

 

cmd1 > file1

将命令1 的结果输入到文件1

cmd1 > >file1

将命令1 的结果追加到文件1

cmd1 < file1

将文件1 的内容输出作为 命令 1执行

cmd1 << file1

将文件1 的内容追加命令 1

cmd1 2> file1

错误输出重定向,命令1执行的错误信息会输入给文件1

cmd1 &> file1

标准输出与错误输出重定向,标准输出和错误输出一起输入到文件1中,屏幕将无显示

 

命令1 |命令2|命令1

将命令1的结果,输出给命令2,作为命令2的输入,再将命令2的结果输出给命令3,作为命令3的输入

 

命令1 |&命令2|命令1

将命令1的标准结果和标准错误信息,输出给命令2,作为命令2的输入,再将命令2的结果输出给命令3,作为命令3的输入

 

在命令后加入&,可以让命令到后台运行

COMMAND &

# gcc   myproc.c&


4,命令执行顺序

分号,多个命令用分号隔开,最后一个回车后,命令按顺序执行

&&  连接连个命令,第一个命令执行成功后才能执行第二个命令 

||      连接连个命令,第一个命令执行失败后才能执行第二个命令 

 


5,shell通配符

?       表示任意单个字符

*       表示任意长度字符

[ ]     表示匹配[  ]给定字符集合的任意一个字符

{ }    表示将{ }中的字符串,以及前导和后继字符作为匹配条件


6,单引号,双引号,反引号

单引号括起来的字符都会变成普通字符串

双引号括起来的字符除 $ "  `  \  外都会变成普通字符串

反引号括起来的字符串会被作为命令执行

 

 


7 declare [-afirx]  声明变量类型

-a    定义为数组

-f     定义为函数

-i     定义为整数

-r     定义为只读

-x     定义为通过环境输出比变量

 

declare -i    plaus=1+2+4*4-5

echo  plaus

 


 

8 test命令(如果不想使用tset可以使用“[ 表达式 ]”来代替,表达式前后有空格)

 

test  -e  file        测试文件是否存在,存在为真

test -d  file         测试文件是否存在且是目录,是则为真

test  -x  file        测试文件是否存在且可以执行,是则为真

test  -r  file        测试文件是否存在且为只读,是则为真

test  -w  file       测试文件是否存在且可写入,是则为真

 

test  -b  file       测试文件是否存在且为块设备,是则为真

test  -c   file       测试文件是否存在且为字符设备,是则为真

test  -s   file       测试文件是否存在且长度大于0,是则为真

test  -f   file       测试文件是否存在且是普通文件,是则为真

 

9 数值比较测试

-eq       等于

-ne       不等于

-gt        大于

-lt         小于

-ge       大于等于

-le        小于等于

 

10  字符串比较测试

-z     s1      如果字符串s1的长度是0,值为真

-n     s2     如果字符串s1的长度不为0,值为真

s1=s2       相等值为真

s1!=s2      不相等值为真

s1              如果字符串s1不是空串,值为真

 

 


11  控制结构

11.1   if  then  else  fi

 

echo "press y to continue"

read yn

if [ "$yn"="y" ] || [ "$yn"="Y"]; then echo "script is running"

else

echo "Stop"

fi

 

11.2   case  ......esac

 

echo "press you select "

read number

 

case  $number  in                       //如果没有read 交互式输入,直接输入使用$1   case  $1  in   

one)   echo   "you choice is one"

;;

 

tw0)     echo   "you choice is two"

;;

 

*)     echo   "Usage {one|two}"

exit 1

esac

 

11.3   for (( 条件1;条件2;条件3))

for var    in   var1   var2  var3

 

 

 

while[ 条件1 ] && { || }  [ 条件2 ]      当条件符合时就继续

until [ 条件1 ] && { || }  [ 条件2 ]       直到条件符合时才继续

 

函数

函数名() {

 

 

}

 

For循环的写法:

item=""

for num in $(cat health_item.txt);do item="$item,$num";done

echo $item

 

 


12  脚本调试

sh  [-nvx]   script.sh

-n   不执行脚本,查询脚本内容语法,错误则列出    sh -n   script.sh

-v   执行脚本之前先把脚本内容显示在屏幕上

-x   将用到的脚本内容显示在屏幕上

 

13  For循环详解

shell里面,关于循环的语句很多,最简单的一个
for .. in ..

do
    ...
done

这样的结构就是一个简单的循环,将列表中的每一个条目都循环一次。
了解编程的人都知道forwhile循环的区别:

while
until的循环方式是必须要符合某个条件的状态,再循环

for
这种语法则是已经知道将要进行几次循环的状态。

所以for循环的语法结构如下:

for var in con1  con2 con3...
do
   
程序段

done
就上面的语法结构来说,这个var的变数内容在循环工作的时候:

1
第一次循环时,var的内容是con1

2
第二次循环时,var的内容是con2

3
第三次循环时,var的内容是con3

......
例子:

for f in test*; do mv $f $f.log;done
将文件夹中test开头的文件重命名为testXXX.log

关于for比较全的用法

1 for((i=1;i<=10;i++));do echo $(expr $i \* 4);done
2
、在shell中常用的是
for i in $(seq 10)
3
for i in `ls`
4
for i in ${arr[@]}
5
for i in $* ; do
6
for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
7
for i in f1 f2 f3 ;do
8
for i in *.txt
9
for i in $(ls *.txt)
for in
语句与` `$( )合用,利用` `$( )的将多行合为一行的缺陷,实际是合为一个字符串数组

##for num in $(seq 1 100)
10
LIST="rootfs usr data data2"
for d in $LIST; do
for in语句自动对字符串按空格遍历的特性,对多个目录遍历

11
for i in {1..10}
12
for i in stringchar {1..10}
13
awk 'BEGIN{for(i=1; i<=10; i++) print i}'
注意:AWK中的for循环写法和C语言一样的

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值