1、变量赋值
a='123' 说明,= 号前后没有空格。有空格就报错
echo 打印变量内a容
用echo $a 表示, 组合其他文件 就用 echo " this is a ${a} book" 用${a}获取变量值。
注意变量的大小写,shell对大小写敏感。
echo 后面接东西要隔开一个空格。
如echo "" echo 与后面的 "" 有个空格
1104号,学习shell脚本,学习内容是各种循环。
if
for
while
until等
while read line ;do
echo $line;
done < /etc/hosts; 将文件内容显示输送的变量 line,然后显示
----------------------------------------------------------------------------
if结构式
if [ ... ];then
...........; 每句后都有;而 then 后面没有任务符号,
elif [ ... ] ;then
...........;
else
...........;
fi ;
----------------------------------------------------------------------------
for结构 for 变量 in 字符串|$变量m ,$变量m ,中含有多个数据,如$(list *.text) 等 或者$(seq 10) 之类的。
for 变量 in seq字符串 ;do
action ;
done
for结构赋值
for((赋值;条件;运算语句))
do
action
done;
实例(testfor2.sh):
#!/bin/sh
for((i=1;i<=10;i++));do
echo $i;
done;
可以看到 i-- 是否用双括号标准
而判断条件可以用单方括号,也可用双方括号。
----------------------------------------------------------------
while语句结构
while 条件语句;do
action
done;
while [[ $i -gt 5 ]];do 或者为 while [ $i -gt 5 ];do 单双没有关系
echo $i;
((i--));
done;
----------------------------------------------------------------------------------------
until结构
until 条件;do
action
done
------------------------------------------------------------------------------------------------
case结构
ase $arg in
pattern | sample)
action ;;
pattern1)
action ;;
*) #默认
action ;;
esac
pattern1 是正则表达式,可以用下面字符:
* 任意字串
? 任意字元
[abc] a, b, 或c三字元其中之一
[a-n] 从a到n的任一字元
| 多重选择
case $num in
1 | 2 | 3 | 4 | 5 ) 数字
case $1 in
start | begin) 字符,没有引号。
多个数据合作而条件选择时 用“| ” 进行“或”关系连接
----------------------------------------------------------------------------------------
select 变量name in seq变量;do
action
done
#!/bin/sh
WORD="a b c"
select i in $WORD d
select num in 1 2 3 4 5 6 7 8 9 10
select ch in "begin" "end" "exit"
select .. in .. 后面的内容,数字和字段有区别,数字不需要引号,字段就需要引号。
输出时,输入的是a b c 的序列号。
[root@node2 zhg1]# ./rselect
1) a
2) b
3) c
#? 3 输入3 显示第3个字符c
c
#? 1 输入1 显示第1个字符a
a
#? 2 输入2显示第2个字符b
b
#?
----------------------------------------------------------------
数组的表现形式: arr[@] 取数据内的数据${arr[@]} 用${ } 进行获取
A=( "F1" "f2" "f3" )
for i in ${A[@]}; do
echo $i ;
done
arr=("a" "b" "c")
echo "arr is (${arr[@]})"
echo "item in array:"
for i in ${arr[@]}
do
echo "$i"
done
1105 号练习记录
for练习
完成批量传输文件的处理
shell 脚本如下line:
srcfiles=$2
i=0
total=`wc -l $1` #初始化数据,注意用到``,也就是tab上面的~ 按钮, 效果与$() 完全一致
for line in $(cat $1)
do
(( i++)) #效果等同与let i++
# echo -e "\n\n"
echo $line;
cp $srcfiles $line #这才是核心命令,用cp命令完成复制。
#如果是用一个变量表示执行命令 如cmd ='cp'$srcfiles$line 这样是无法执行的,因为cp命令在执行的时候,命令、源文件、 目标文件 是有空格隔开的,如果是cmd ='cp' $srcfiles
$line 也不可以,虽然有空格,但是默认cmd就是cp两个字符,后的两个变量由于是空格隔开,所有就不认为是一个变量,唯一解决的办法就是用' '连接,表示空格 所有正确可执行的格式
就是cmd='cp '$srcfiles' '$line 这样在执行eval $cmd 解释为 cp 源文件 目标文件 可以完成复制任务了。
echo " cp $srcfiles $line "
echo '--------------- '$line' #'$i'/'$total' ---------------' 这个用于记录执行到$1的那一行路径了,主要是用于纠错处理。
done
脚本执行格式 ./line F/文件名(文件内容是各种路径) 需要被批量复制的文件
如 ./line /zhg/zhg1/qqq /zhg/zhg1/until :将/zhg/zhg1/until 复制到 /zhg/zhg1/qqq 中记录的各行路径中
wxq4493 于 2013-11-06 15:08:52发表:
。。。。
PiOsnoae 于 2013-11-06 08:45:23发表:
高人