关于shell脚本编程出现的问题

正则表达式

KaTeX parse error: Can't use function '\.' in math mode at position 22: …=~ ^[-[:alnum:]\̲.̲_]+
查找$REPLY变量里行首行尾,以-,后面是任意数字和._最少出现一次以上
KaTeX parse error: Can't use function '\.' in math mode at position 25: …^-?[[:digit:]]*\̲.̲[[:digit:]]+
查找$REPLY变量里行首行尾,-出现0次或一次,相同任意数字任意次 . 任意数字最少一次
R E P L Y =   − ? [ [ : d i g i t : ] ] + REPLY =~ ^-?[[:digit:]]+ REPLY= ?[[:digit:]]+
查找$REPLY变量里行首行尾,-出现0次或一次,任意数字最少一次

参数

显示换行

echo -e "OK! \n" # -e 开启转义
echo "It is a test"

输出结果

OK!

It is a test

显示不换行

#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

输出结果

OK! It is a test

显示结果定向至文件

echo "It is a test" > myfile

原样输出字符串,不进行转义或取变量(用单引号)

echo '$name\"'

输出结果

$name\"

显示命令执行结果

echo `date`

注意: 这里使用的是反引号 `, 而不是单引号 '。

结果将显示当前日期

Thu Jul 24 10:08:46 CST 2014

echo输出的字符串总结

================================================================

 			|  能否引用变量  |  能否引用转移符  |  能否引用文本格式符(如:换行符、制表符)

单引号  		|		否		|		否		  |		否		

双引号  		|		能		|		能		  |		能

无引号  		|		能		|		能		  |		否        

================================================================

read命令

read 命令一个一个词组地接收输入的参数,每个词组需要使用空格进行分隔;如果输入的词组个数大于需要的参数个数,则多出的词组将被作为整体为最后一个参数接收。

测试文件 test.sh 代码如下:

read firstStr secondStr
echo "第一个参数:$firstStr; 第二个参数:$secondStr"

执行测试:

$ sh test.sh 
一 二 三 四
第一个参数:一; 第二个参数:二 三 四

实例, 文件 test.sh:

read -p "请输入一段文字:" -n 6 -t 5 -s password
echo -e "\npassword is $password"

参数说明:

  • -p 输入提示文字
  • -n 输入字符长度限制(达到6位,自动结束)
  • -t 输入限时
  • -s 隐藏输入内容
$ sh test.sh 
请输入一段文字:
password is asdfgh

print与printf的区别

1,print 中不能使用%s ,%d 或%c;

2,print 自动换行,printf 没有自动换行

linux shell数组赋值方法

Bash中,数组变量的赋值有两种方法:

(1) name = (value1 … valuen) 此时下标从0开始

(2) name[index] = value

下面以一个简单的脚本来说明,脚本内容如下:

	#!/bin/bash
  #定义数组
  A=(a b c def)

#把数组按字符串显示输出

	echo ${A[@]}

#屏幕显示:a b c def

#数组的长度表示${#A[*]}

  len=${#A[*]}
  echo ${#A[*]}

#屏幕显示:4

#改变数组元素的值
  A[3]='vivian'
  echo ${A[*]}

#屏幕显示:a b c vivian

  #循环输出数组元素
  i=0
  while [ $i -lt $len ]
  do
  echo ${A[$i]}
  let i++
  done

#屏幕输出:
  #a
  #b
  #c
  #vivian

#循环输出数组元素的另一种写法,注意,在条件中,引用变量一定要用双引号 ,否则报错

  for (( j=0; j<"$len"; j=j+1 ))
  do
  echo ${A[$j]}
  done

#循环输出数组元素的另一种写法,注意, A [ ∗ ] 不 能 写 成 {A[*]}不能写成 A[]A , A 默 认 是 第 一 个 元 素 , 如 果 A = &quot; a b c d e d &quot; , 就 可 以 写 A默认是第一个元素,如果A=&quot;a b c ded&quot;,就可以写 A,A="abcded",A

  for value in ${A[*]}
  do
  echo $value
  done

数组

声明一个数组变量

直接赋值:

array[0]=”Zero” array[1]=”One” array[2]=”Two”

declare声明:

declare -a array

小括号空格法:

array=(Zero One Two)

引号空格法:

array=”Zero One Two”

混合法:

array=([0]=”Zero” [1]=”One” [2]=”Two”) 

遍历一个数组

标准for循环:

for(( i=0;i<${#array[@]};i++)) 
do 
  echo ${array[i]}
done
#输出结果
Zero
One
Two

for…in:

for i in ${array[@]}
do 
  echo $i
done
#输出结果
Zero
One
Two

获取数组的长度

echo ${#array[@]}
3
echo ${#array[*]}
3

删除数组元素

unset array[0]
echo ${#array[@]}
2
for i in ${array[@]}
do 
  echo $i 
done
One
Two

切片

echo ${array[@]:0:1}
Zero
echo ${array[@]:0:2}
Zero One
echo ${array[@]:0:3}
Zero One Two
echo ${array[@]:1}
One Two
echo ${array[@]:2}
Two

更多文档需求可以在[http://www.runoob.com/linux/linux-tutorial.html]中找到

posted @ 2019-01-04 21:49  小Aer  阅读(47)  评论(0编辑  收藏  举报