shell如何shell获取字符串长度并自动输入

shell脚本变成之数组、字符串处理及其它功能补充 | Linux运维部落
数组定义:
&&&&&&&&&&&&& && 能够存储多个元素的内存空间,每个元素在数组中具有特定的索引编号,我们可以通过变量名和索引编号来查看数组中的某一元素。
&&&&&&&&数组分类:
&&&&&&&&&&&&&&&& 索引数组:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&定义:索引编号从0开始,依次递增加一,如:0、1、2、3…
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&array[0]、array[1]、array[2]…
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&声明方式:declare -a arrayname
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&& 关联数组:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 定义:索引内容可以由我们自行指定,在bash4.0版本以后开始支持。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&array[haha]、array[xixi]、array[enen]…
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&声明方式:declare -A arrayname
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&注意:索引数组在使时必须事先声明,否则调用时会出错,如下图所示。
&&&&&&&&&&&&root@cenots6.8&&~&#&array[a]=1&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&array[b]=2
&&&&&&&&&&&&root@cenots6.8&&~&#&array[c]=3
&&&&&&&&&&&&root@cenots6.8&&~&#&array[d]=4
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${array[@]}
&&&&&&&&&&&&4
&&&&&&&&&&&&root@cenots6.8&&~&#&declare&-A&array
&&&&&&&&&&&&root@cenots6.8&&~&#&array[a]=1
&&&&&&&&&&&&root@cenots6.8&&~&#&array[b]=2
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${array[a]}
&&&&&&&&&&&&1
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${array[b]}
&&&&&&&&&&&&2
12345678910111213
root@cenots6.8
~ #&array[a]=1&&&&&&&&&&&&
root@cenots6.8
~ #&array[b]=2
root@cenots6.8
~ #&array[c]=3
root@cenots6.8
~ #&array[d]=4
root@cenots6.8
~ #&echo&${array[@]}
root@cenots6.8
~ #&declare&-A&array
root@cenots6.8
~ #&array[a]=1
root@cenots6.8
~ #&array[b]=2
root@cenots6.8
~ #&echo&${array[a]}
root@cenots6.8
~ #&echo&${array[b]}
&&&&&&&&&&&&root@cenots6.8&&~&#&unset&array&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&array[0]=1
&&&&&&&&&&&&root@cenots6.8&&~&#&array[1]=2
&&&&&&&&&&&&root@cenots6.8&&~&#&array[2]=3
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${array[@]}
&&&&&&&&&&&&1&2&3
root@cenots6.8
~ #&unset&array&&&&&&&&&&&&
root@cenots6.8
~ #&array[0]=1
root@cenots6.8
~ #&array[1]=2
root@cenots6.8
~ #&array[2]=3
root@cenots6.8
~ #&echo&${array[@]}
&&&&&&&&数组的赋值方式:
&&&&&&&&&&&&&&&& a、每次赋值一个元素:
&&&&&&&&&&&&&&&&&&&&&&&&&&&array_name[index]=vallue
&&&&&&&&&&&&&&&&&&&&&&&&&& 举例:array[0]=1 ## 将1赋值给数组中索引为0的元素,也可以理解为数组中第一个位置处存放的元素为1 &&&&&&&&&&&&&&&& &
&&&&&&&&&&&&&&&& b、一次赋值全部元素:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&array_name=(&value1&空格“value2”空格“value3”…)
&&&&&&&&&&&&&&&&&&&&&&&&&&& 举例:array=(haha xixi enen)&&&&&&&&& ##这里需要注意,如果之前array已经赋过值了,那么之数组的值将被覆盖。
&&&&&&&&&&&&&&&& c、只赋值特定元素:
&&&&&&&&&&&&&&&&& & &&&&&&&&array_name=([0]=&value1&空格&[2]=value2&空格[3]=&value3&…)
&&&&&&&&&&&&&&&&&&&&&&&&&&& 举例:array=([0]=1 [3]=&xixi& [4]=&abc&)&&&&&&&& ###注意:bash的数组支持稀疏格式(索引不连续)
&&&&&&&&&&&&&&&&& d、交互式赋值:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&read -a array_name
&&&&&&&&&&&&root@cenots6.8&&~&#&read&-a&array&&&&&&&&&&&&
&&&&&&&&&&&&1&aa&bb&3&4
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${array[@]}
&&&&&&&&&&&&1&aa&bb&3&4
root@cenots6.8
~ #&read&-a&array&&&&&&&&&&&&
1 aa bb 3 4
root@cenots6.8
~ #&echo&${array[@]}
1 aa bb 3 4
&&&&&&&&&&&&&&&&e、向稀疏数组中追加元素:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&array[${#array_name[@]}]=value
&&&&&&&&&&&&&&&&f、删除数组中的某一元素
&&&&&&&&&&&&&&&&&&&&&&&&&&&&unset array[index]
&&&&&&&&数组的引用:
&&&&&&&&&&&&&&& 引用数组元素:${array_name[index]}&&&&&&&&& ##这里需要注意如果省略“{}”,则表示引用下表为0的元素。 &&&&
&&&&&&&&&&&&&&&&引用数组中的所有元素:${array_name[@]} 或 ${array_name[*]}
&&&&&&&&&&&&&&&&数组的长度:${#array_name[*]}& 或 ${#array_name[@]}
&&&&&&& 数组数据处理:
&&&&&&&&&&&&&&&&数组切片:${array_name[*]:offset:number}&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&offset:跳过多少个 ;number:显示多少个;处理顺序:从做到右
&&&&&&&&&&&&root@cenots6.8&&~&#&array=(1&2&3&4&5&6&7&8&9&10)&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${array[@]:6:2}
&&&&&&&&&&&&7&8
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${array[@]:6}
&&&&&&&&&&&&7&8&9&10
root@cenots6.8
~ #&array=(1&2&3&4&5&6&7&8&9&10)&&&&&&&&&&&&
root@cenots6.8
~ #&echo&${array[@]:6:2}
root@cenots6.8
~ #&echo&${array[@]:6}
&&&&&&&&&&&&&&&&&&&&&&
字符串处理:
&&&&&&&&字符串切片:
&&&&&&&&&&&&&&&&1、${#var}:返回字符串var的长度,此处用法等同于${#array_name[@]}
&&&&&&&&&&&&root@cenots6.8&&~&#&var=`getent&passwd&root`&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${#var}
&&&&&&&&&&&&39
root@cenots6.8
~ #&var=`getent&passwd&root`&&&&&&&&&&&&
root@cenots6.8
~ #&echo&${#var}
&&&&&&& &&&&&&&&2、${var:offset:number}:返回字符串变量var中,从左到右的顺序,先跳过“offset”个字符,然后显示其后面的“number”个字符
&&&&&&&&&&&&root@cenots6.8&&~&#&var=`getent&passwd&root`&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var:3:3}
&&&&&&&&&&&&t:x
root@cenots6.8
~ #&var=`getent&passwd&root`&&&&&&&&&&&&
root@cenots6.8
~ #&echo&$var
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var:3:3}
&&&&&&& &&&&&&&&3、${var:offset}:返回字符串变量var中,从做到右的顺序,跳过“offset”个字符,显示剩余的部分
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var:3}&&&&&&&&&&&&
&&&&&&&&&&&&t:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var:3}&&&&&&&&&&&&
t:x:0:0:bb,,:/root:/bin/bash
&&&&&&& &&&&&&&&4、${var:空格-number}:从右往左显示“number”个字符(-number选项需要在bash4.2以后的版本才能使用)
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var:&-4}&&&&&&&&&&&&
&&&&&&&&&&&&bash
root@cenots6.8
~ #&echo&${var:&-4}&&&&&&&&&&&&
&&&&&&&&&&&&&&&&5、${var:offset:空格-number}:从左往右的顺序,先跳过“offset”个字符,然后取到最右侧number个长度字符之前。(-number选项需要在bash4.2以后的版本才能使用)
&&&&&&&&&&&&root@Centos7.2&&~&#&var=`getent&passwd&root`&&&&&&&&&&&&
&&&&&&&&&&&&root@Centos7.2&&~&#&echo&${var:3:&-3}
&&&&&&&&&&&&t:x:0:0:root:/root:/bin/b
root@Centos7.2
~ #&var=`getent&passwd&root`&&&&&&&&&&&&
root@Centos7.2
~ #&echo&${var:3:&-3}
t:x:0:0:root:/root:/bin/b
&&&&&&&&基于模式取子串:
&&&&&&&&&&&&&&&&1、${var#*PARTTERN}:此处PARTTERN可以指定任意字符, 自左向右查找第一次匹配到PARTTERN的内容,然后从行首删到第一次匹配到的所有内容。
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var&&&&&&&&&&&&
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var#*/}
&&&&&&&&&&&&root:/bin/bash
root@cenots6.8
~ #&echo&$var&&&&&&&&&&&&
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var#*/}
root:/bin/bash
&&&&&&& &&&&&&&&2、${var##*PARTTERN}:自左向右查找最后一次匹配到PARTTERN的内容,然后从行首删除之最后一次匹配到的所有内容。
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var&&&&&&&&&&&&
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var##*/}
&&&&&&&&&&&&bash
root@cenots6.8
~ #&echo&$var&&&&&&&&&&&&
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var##*/}
&& &&&&&&&&&&&& 3、${var%PARTTERN*}:自右向左的顺序查找第一次匹配到的内容,然后从右面行首删除至第一次匹配到的所有内容。
&&&&&&&&&&&&var=root:x:0:0:bb,,:/root:/bin/bash&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var%/*}
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin
var=root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var%/*}
root:x:0:0:bb,,:/root:/bin
&&&&&&&& & & &&&&4、${var%%PARTTERN*}:自右向左的顺序查找最后一次匹配到的内容,然后从右面行首删除至最后一次匹配到的所有内容。
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var&&&&&&&&&&&&
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var%%/*}
&&&&&&&&&&&&root:x:0:0:bb,,:
root@cenots6.8
~ #&echo&$var&&&&&&&&&&&&
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var%%/*}
root:x:0:0:bb,,:
&&&&&&&&查找替换:
&&&&&&&&&&&&&&&& 1、${var/PARTTERN/substi}:自左向右,查找var所表示的字符串中,第一次被PARTTERN所匹配到的字符串,用substi替换
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var&&&&&&&&&&&&
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var/root/david/}
&&&&&&&&&&&&&naruto/:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&$var&&&&&&&&&&&&
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var/root/david/}
naruto/:x:0:0:bb,,:/root:/bin/bash
&&&&&&& &&&&&&&&& 2、${var//PARTTERN/sbusti}:自左向右,查找var所表示的字符串中,所有次被PARTTERN所匹配到的字符串,用substi替换
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var&&&&&&&&&&&&
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var//root/naruto}
&&&&&&&&&&&&naruto:x:0:0:bb,,:/naruto:/bin/bash
root@cenots6.8
~ #&echo&$var&&&&&&&&&&&&
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var//root/naruto}
naruto:x:0:0:bb,,:/naruto:/bin/bash
&&&&&&&&&&&&&&&& 3、${var/#PARTTERN/sbusti}:查找var所表示的字符串中,行首被PARTTERN所匹配到的字符串,用sunsti替换
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var/#root/naruto}
&&&&&&&&&&&&naruto:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&$var
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var/#root/naruto}
naruto:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&&&&& 4、${var/%PARTTERN/sbusti}:查找var所表示的字符串中,行尾被PARTTERN所匹配到的字符串,用sunsti替换
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var/%bash/naruto}&&&&&&&&&&&&
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/naruto
root@cenots6.8
~ #&echo&${var/%bash/naruto}&&&&&&&&&&&&
root:x:0:0:bb,,:/root:/bin/naruto
&&&&&&&&查找删除:
&&&&&&&&&&&&&&&&1、${var/PARTTERN}:查找var所表示的字符串中,第一次被PARTTERN所匹配到的内容并删除。
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var/root}
&&&&&&&&&&&&:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&$var
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var/root}
:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&&&&&2、${var//PARTTERN}:查找var所表示的字符串中,所有被PARTTERN所匹配到的内容并删除。
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var//root}&&&&&&&&&&&&
&&&&&&&&&&&&:x:0:0:bb,,:/:/bin/bash
root@cenots6.8
~ #&echo&${var//root}&&&&&&&&&&&&
:x:0:0:bb,,:/:/bin/bash
&&&&&&&&&&&&&&&&3、${var/PARTTERN}:查找var所表示的字符串中,行首被PARTTERN所匹配到的内容并删除。
&&&&&&&&&&&&&&&&4、${var/PARTTERN}:查找var所表示的字符串中,行尾被PARTTERN所匹配到的内容并删除。
&&&&&&&&字符串大小写转换:
&&&&&&&&&&&&&&&&1、${var^^}:把var中所有小写字符转换为大写
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var&&&&&&&&&&&&
&&&&&&&&&&&&root:x:0:0:bb,,:/root:/bin/bash
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var^^}
&&&&&&&&&&&&ROOT:X:0:0:BB,,:/ROOT:/BIN/BASH
root@cenots6.8
~ #&echo&$var&&&&&&&&&&&&
root:x:0:0:bb,,:/root:/bin/bash
root@cenots6.8
~ #&echo&${var^^}
ROOT:X:0:0:BB,,:/ROOT:/BIN/BASH
&&&&&&&&&&&&&&& 2、${var,,}:把var中所有大写字符转换为小写
变量赋值的特殊方式:
&&&&&&&&&&&&&&&&1、${var:-value}:如果var值为空,那么反馈value的值,否则,返回var的值
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var:-abc}&&&&&&&&&&&&
&&&&&&&&&&&&abc
&&&&&&&&&&&&root@cenots6.8&&~&#&var=123
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var:-abc}
&&&&&&&&&&&&123
root@cenots6.8
~ #&echo&${var:-abc}&&&&&&&&&&&&
root@cenots6.8
~ #&var=123
root@cenots6.8
~ #&echo&${var:-abc}
&&&&&&&&&&&&&&&&2、${var:+value}:如果var值不为空,那么返回value的值,否则返回var的值
&&&&&&&&&&&&root@cenots6.8&&~&#&var=123&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var:+abcd}
&&&&&&&&&&&&abcd
root@cenots6.8
~ #&var=123&&&&&&&&&&&&
root@cenots6.8
~ #&echo&${var:+abcd}
&&&&&&&&&&&&&&&&3、${var:=value}:如果var值为空,则返回value的值,然后将value的值赋给var,否则返回var的值
&&&&&&&&&&&&root@cenots6.8&&~&#&unset&var
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var:=naruto}
&&&&&&&&&&&&naruto
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$var
&&&&&&&&&&&&naruto
root@cenots6.8
~ #&unset&var
root@cenots6.8
~ #&echo&${var:=naruto}
root@cenots6.8
~ #&echo&$var
&&&&&&&&&&&&&&&&4、${var:?error_info}:如果var值为空,则返回那么在当前终端打印error_info,否则返回var的值
&&&&&&&&&&&&root@cenots6.8&&~&#&unset&var&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${var:?Are&you&kiding&me?}
&&&&&&&&&&&&-bash:&var:&Are&you&kiding&me?
root@cenots6.8
~ #&unset&var&&&&&&&&&&&&
root@cenots6.8
~ #&echo&${var:?Are&you&kiding&me?}
-bash: var: Are you kiding me?
高级变量用法:
&&&&&&&&&&&&shell是一种弱类型语言,因此我们在给变量赋值时,自动默认为字符串类型,当我们需要指定某些某些特殊变量类型时可通过declare命令指定,方法如下:
&&&&&&&&&&&&&&&&格式:declare options varname
&&&&&&&&&&&&&&&&选项:-r& 将变量设置为只读变量
&&&&&&&&&&&&&&&&&&&&&&&&& -i&& 将变量定义为整形
&&&&&&&&&&&&&&&&&&&&&&&&& -a& 将变量定义为索引数组
&&&&&&&&&&&&&&&&&&&&&&&&& -A& 将变量定义为关联数组
&&&&&&&&&&&&&&&&&&&&&&&&& -x& 将变量定义为环境变量 ,等同与export
&&&&&&&&&&&&&&&&&&&&&&&&& -I&& 将变量值转换为小写字母 declare -I var=UUID
&&&&&&&&&&&&&&&&&&&&&&&&& -u& 将变量值转换为大写字母& declare -u var=uuid
&&&&&&&&&&&&&&&&&&&&&&&&& -f&& 显示此脚本前定义过的所有函数名及其内容&&&&&&&&&&&&&&&&&&&&&&&&& -F& 仅显示此脚本前定义过的所有函数名
间接变量引用:
&&&&&&&&&&&&间接变量:变量a中存有元素,然后将变量a当做b的元素存储起来,当我们调用b时,就可以查看a中的内容,此时我们称之为变量的间接引用。
&&&&&&&&&&&&root@cenots6.8&&~&#&a=wahaha&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&b=a
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&${!b}
root@cenots6.8
~ #&a=wahaha&&&&&&&&&&&&
root@cenots6.8
root@cenots6.8
~ #&echo&${!b}
&&&&&&&&&&&&eval命令将会首先扫描命令然后进行替换,在执行命令,该命令适用于那些第一次无法实现其功能的变量,该命令对其进行两次扫描。
&&&&&&&&&&&&root@cenots6.8&&~&#&cmd=whoami&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&echo&$cmd
&&&&&&&&&&&&whoami
&&&&&&&&&&&&root@cenots6.8&&~&#&eval&$cmd
&&&&&&&&&&&&root
&&&&&&&&&&&&root@cenots6.8&&~&#&$cmd
&&&&&&&&&&&&root
root@cenots6.8
~ #&cmd=whoami&&&&&&&&&&&&
root@cenots6.8
~ #&echo&$cmd
root@cenots6.8
~ #&eval&$cmd
root@cenots6.8
创建临时文件:
&&&&&&&&&&&&命令:mktemp,创建临时文件,通过尾部#为的随机字符,可以避免冲突
&&&&&&&&&&&&格式:mktemp [option]…fileName.XXX&&& (XXX至少三个,可以更多,多多少?你试试)
&&&&&&&&&&&&root@cenots6.8&&~&#&mktemp&a.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&&&&&&&&&&&&
&&&&&&&&&&&&a.Cavjq0rtlW7uLTGnzk34auduckfw37HjicbSiwEvP
root@cenots6.8
~ #&mktemp&a.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&&&&&&&&&&&&
a.Cavjq0rtlW7uLTGnzk34auduckfw37HjicbSiwEvP
&&&&&&&&&&&&选项:-d:创建临时目录
&&&&&&&&&&&&&&&&&&&&& -p DIR 或 –tmpdir=DIR:指明临时文件所在目录的位置
&&&&&&&&&&&&root@cenots6.8&&~&#&mktemp&-d&~/tempdir.XXX&&&&&&&&&&&&
&&&&&&&&&&&&/root/tempdir.wUB
&&&&&&&&&&&&root@cenots6.8&&~&#&mktemp&-p&~/tempdir.wUB&a.XXXX
&&&&&&&&&&&&/root/tempdir.wUB/a.2jDI
root@cenots6.8
~ #&mktemp&-d&~/tempdir.XXX&&&&&&&&&&&&
/root/tempdir.wUB
root@cenots6.8
~ #&mktemp&-p&~/tempdir.wUB&a.XXXX
/root/tempdir.wUB/a.2jDI
安装复制文件:
&&&&&&&&&&&&命令:install
&&&&&&&&&&&&功能:此install 将文件(通常仅是编译后的文件)复制到您所选择的目的位置
&&&&&&&&&&&&格式:
&&&&&&&&&&&&&&&&&&&&1、install [options]…[-T] source dest 单个文件
&&&&&&&&&&&&&&&&&&&&&& & & 举例:如下所示,经install复制过的文件权限发生了变化,由644变成了755自动加了执行权限
&&&&&&&&&&&&root@cenots6.8&&~&#&touch&aa&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&install&aa&bb&
&&&&&&&&&&&&root@cenots6.8&&~&#&ll&aa&bb
&&&&&&&&&&&&-rw-r--r--.&1&root&root&0&8月&&24&13:47&aa
&&&&&&&&&&&&-rwxr-xr-x.&1&root&root&0&8月&&24&13:47&bb
root@cenots6.8
~ #&touch&aa&&&&&&&&&&&&
root@cenots6.8
~ #&install&aa&bb&
root@cenots6.8
~ #&ll&aa&bb
-rw-r--r--. 1 root root 0 8月
24 13:47 aa
-rwxr-xr-x. 1 root root 0 8月
24 13:47 bb
&&&&&&&&&&&&&&&&&&& 2、install [option]…source…directory&
&&&&&&&&&&&&&&&&&&&&&&&&&&&& 举例:复制文件到指定目录中,并给文件添加执行权限
&&&&&&&&&&&&root@cenots6.8&&~&#&cd&/testdir/
&&&&&&&&&&&&root@cenots6.8&&/testdir&#&install&ee&~/
&&&&&&&&&&&&root@cenots6.8&&/testdir&#&cd&
&&&&&&&&&&&&root@cenots6.8&&~&#&ll&ee
&&&&&&&&&&&&-rwxr-xr-x.&1&root&root&0&8月&&24&16:12&ee
root@cenots6.8
~ #&cd&/testdir/
root@cenots6.8
/testdir #&install&ee&~/
root@cenots6.8
/testdir #&cd&
root@cenots6.8
-rwxr-xr-x. 1 root root 0 8月
24 16:12 ee
&&&&&&&&&&&&&&&&&&&&3、install [OPTION]… -t DIRECTORY SOURCE…
&&&&&&&&&&&&&&&&&&&&&&&&&&&&举例:复制文件到指定目录中,并添加执行权限
&&&&&&&&&&&&root@cenots6.8&&~&#&touch&ee&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&ll&ee
&&&&&&&&&&&&-rw-r--r--.&1&root&root&0&8月&&24&16:09&ee
&&&&&&&&&&&&root@cenots6.8&&~&#&install&-t&/testdir/&ee
&&&&&&&&&&&&root@cenots6.8&&~&#&ll&/testdir/ee&
&&&&&&&&&&&&-rwxr-xr-x.&1&root&root&0&8月&&24&16:10&/testdir/ee
root@cenots6.8
~ #&touch&ee&&&&&&&&&&&&
root@cenots6.8
-rw-r--r--. 1 root root 0 8月
24 16:09 ee
root@cenots6.8
~ #&install&-t&/testdir/&ee
root@cenots6.8
~ #&ll&/testdir/ee&
-rwxr-xr-x. 1 root root 0 8月
24 16:10 /testdir/ee
&&& &&&&&&&&&&&&&&&&4、install [OPTION]… -d DIRECTORY…
&&&&&&&&&&&&&&&&&&&&&&&&&&&&举例:创建空目录,并附加权限
&&&&&&&&&&&&root@cenots6.8&&~&#&install&-m&777&-d&dir&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&ll&dir&-d
&&&&&&&&&&&&drwxrwxrwx.&2&root&root&4096&8月&&24&16:04&dir
root@cenots6.8
~ #&install&-m&777&-d&dir&&&&&&&&&&&&
root@cenots6.8
~ #&ll&dir&-d
drwxrwxrwx. 2 root root 4096 8月
24 16:04 dir
&&&&&&&&&&&&选项:&&&&&&&&&&&&&&&&&&&&-m MODE,默认755&&&&&&&&&&&&&&&&&&&&-o OWNER&&&&&&&&&&&&&&&&&&&&-g GROUP
&&&&&&&&&&&&root@cenots6.8&&~&#&install&-m&222&-o&xixi&-g&root&aa&cc&&&&&&&&&&&&
&&&&&&&&&&&&root@cenots6.8&&~&#&ll&cc
&&&&&&&&&&&&--w--w--w-.&1&xixi&root&0&8月&&24&16:02&cc
root@cenots6.8
~ #&install&-m&222&-o&xixi&-g&root&aa&cc&&&&&&&&&&&&
root@cenots6.8
--w--w--w-. 1 xixi root 0 8月
24 16:02 cc
bash的配置文件:
&&&&&&&&&&&&按生效范围划分,存在两类:
&&&&&&&&&&&&&&&&全局配置:
&&&&&&&&&&&&&&&&&&&&&&&&/etc/profile
&&&&&&&&&&&&&&&&&&&&&&&&/etc/profile.d/*.sh
&&&&&&&&&&&&&&&&&&&&&&&&/etc/bashrc
&&&&&&&&&&&&&&&&个人配置:
&&&&&&&&&&&&&&&&&&&&&&&&~/.bash_profile
&&&&&&&&&&&&&&&&&&&&&&&&~/.bashrc
&&&&&&&&&&&&shell登陆的两种方式:
&&&&&&&&&&&&&&&&&&&&交互式登陆:
&&&&&&&&&&&&&&&&&&&&&&&&&&& 1、直接通过终端输入账号密码登陆;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&2、使用“su – username”切换的用户
&&&&&&&&&&&&&&&&&&&&&&&&&& 执行顺序:/etc/profile –& /etc/profile.d/*.sh –&~/.bash_profile –& ~/.bashrc –& /etc/bashrc
&&&&&&&&&&&&&&&&&&&&交互式登陆:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&1、使用su username切换用户
&&&&&&&&&&&&&&&&&&&&&&&&&&&&2、图形界面下打开的终端
&&&&&&&&&&&&&&&&&&&&&&&&&&&&3、执行脚本
&&&&&&&&&&&&&&&&&&&&&&&&& 执行顺序:~/.bashrc –& /etc/bashrc –& /etc/profile.d/*.sh
&&&&&&&&&&&& 根据profile和bashrc来分类:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&bashrc类:为非交互式和交互式登录的shell提供配置&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&全局: /etc/bashrc&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&个人: ~/.bashrc&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&功用:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1、定义命令别名和函数
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&2、定义本地变量&&&&&&&&&&&&&&&&&&&&&&&&&profile类:为交互式登录的shell提供配置&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&全局: /etc/profile, /etc/profile.d/*.sh&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&个人: ~/.bash_profile&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&功用:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 1、用于定义环境变量&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2、运行命令或脚本
&&&&&&&&&&&& 修改profile和bashrc文件后需生效&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&两种方法:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&1、重新启动shell进程&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&2 、source或 &.&
&&&&&&&&&&&&&&& bash的退出任务
&&&&&&&&&&&&&&&&&&&&&&&&保存在~/.bash_logout文件中(用户)在退出登录shell时运行&&&&&&&&&&&&&&&&&&&&&&&&功能:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&创建自动备份&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&清除临时文件&&&
1、编写脚本,定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件;要统计其下标为偶数的文件中的行数之和
#!/bin/bash
declare&-a&log
declare&-i&j=0
declare&-i&hang=0
declare&-i&sum=0
for&i&in&`ls&/var/log/*.log`
&&&&&&&&log[$j]=$i
&&&&&&&&if&[[&$j%2&-eq&0&]];then
&&&&&&&&&&&&&&&&hang=$(cat&${log[$j]}|wc&-l)
&&&&&&&&&&&&&&&&sum=$sum+$hang
&&&&&&&&fi
&&&&&&&&let&j++
123456789101112131415
#!/bin/bashdeclare -a logdeclare -i j=0declare -i hang=0declare -i sum=0for i in `ls /var/log/*.log`do
log[$j]=$i
if [[ $j%2 -eq 0 ]];then
hang=$(cat ${log[$j]}|wc -l)
sum=$sum+$hang
let j++doneecho $sum
#!/bin/bash
declare&-i&sum=0
declare&-i&a=0
declare&-a&files
files=(/var/log/*.log)
for&a&in&`seq&0&$[${#files[*]}-1]`
&&&&&&&&if&[[&$a%2&-eq&0&]];then
&&&&&&&&&&&&&&&&hang=$(cat&${files[$a]}&|&wc&-l)
&&&&&&&&&&&&&&&&sum=$sum+$hang
&&&&&&&&fi
echo&&Lines:&$sum&
1234567891011121314
#!/bin/bashdeclare -i sum=0declare -i a=0declare -a filesfiles=(/var/log/*.log)for a in `seq 0 $[${#files[*]}-1]`do
if [[ $a%2 -eq 0 ]];then
hang=$(cat ${files[$a]} | wc -l)
sum=$sum+$hang
fidone&echo "Lines: $sum"
2、输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
#!/bin/bash
#输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序
declare&-a&Num
declare&-i&i
declare&-i&j
let&Count=${#Num[@]}-1
for((i=0;i&=$Ci++))
&&&&&&&&for&j&in&`seq&0&$Count`
&&&&&&&&do
&&&&&&&&&&&&&&&&if&[&${Num[i]}&-lt&${Num[j]}&];then
&&&&&&&&&&&&&&&&&&&&&&&&max=${Num[j]}
&&&&&&&&&&&&&&&&&&&&&&&&Num[j]=${Num[i]}
&&&&&&&&&&&&&&&&&&&&&&&&Num[i]=$max
&&&&&&&&&&&&&&&&fi
&&&&&&&&done
echo&${Num[@]}
12345678910111213141516171819202122
#!/bin/bash##输入若干个数值存入数组中,采用冒泡算法进行升序或降序排序&declare -a Numdeclare -i ideclare -i j&Num=($@)let Count=${#Num[@]}-1for((i=0;i<=$Count;i++))do
for j in `seq 0 $Count`
if [ ${Num[i]} -lt ${Num[j]} ];then
max=${Num[j]}
Num[j]=${Num[i]}
Num[i]=$max
donedoneecho ${Num[@]}
root@cenots6.8&&/testdir&#&./maopao.sh&234&5&65&&3455
5&65&87&98&234&
root@cenots6.8
/testdir #&./maopao.sh&234&5&65&&34555 65 87 98 234 3455 7657
3、让用户(管理员或所有用户)的PATH环境变量的值多出一个路径,例如: /usr/local/apache2/bin
cd&/etc/profile.d/
vim&apache.sh
PATH=$PATH:/usr/local/apache2/bin
保存退出vim
.&apache.sh&或者重新登陆即可
cd /etc/profile.d/vim apache.shPATH=$PATH:/usr/local/apache2/bin保存退出vim. apache.sh 或者重新登陆即可
4、用户wang登录时自动启用别名rm=‘rm –i’
vim&~/.bashrc
alias&rm=‘rm&–i’
保存退出vim
source&./bashrc
su -wang vim ~/.bashrcalias rm=‘rm –i’保存退出vimsource ./bashrc
5、用户登录时,显示红色字体的警示提醒信息“ hi,dangerous!”
cd&/etc/profile.d/
vim&login.sh
echo&“hi,dangerous”
保存退出vim
.&login.sh&或者重新登陆即可
cd /etc/profile.d/vim login.shecho “hi,dangerous”保存退出vim. login.sh 或者重新登陆即可
您还未登录,请登录后再进行相关操作!
400-080-6560
在线咨询:
工作时间:周一至周五,9:30-18:30,节假日同时也值班

我要回帖

更多关于 shell脚本编程100例 的文章

 

随机推荐