‘壹’ 新手学习shell脚本,遇到的问题
cd ${0%/*} 表示删除从变量$0尾部开始第一个正斜冈之后匹配到的内容,返回剩下的内容。
比如$0是这个目录/home/john/source 那么就是把"/source"截取掉剩下的。
‘贰’ 紧急求助SHELL脚本执行问题
sh -x 看一下
你的while循环中的<<FTPIT 需要在后边做个收尾,这个模式是
<<EOF
(内容)
EOF
所以你需要在结尾加上FTPIT,要不这个内容就没结束。
跟分号不分号没任何关系
ftp -i -n $ipadd <<FTPIT
user $ftpuser $ftppwd
echo "connect $ipadd success!"
cd /home/dcms/test
binary
get $line
echo "get file $line "
close
bye
FTPIT
‘叁’ shell脚本问题!
1).touch
/opt/storeb/fileb
##表示在/opt/storeb/目录下新建文件fileb,。
2).2>&1
##重定向命令,2表示错误输出,如果有错误,则输出至&1,这地方不
太清除实际输出到哪儿了,估计和2>dev/null的作用一样,将错误丢掉
3).
|
grep
'Read-only
file
system'
##管道命令,查找刚才错误中是否有报
'Read-only
file
system'的错误。
4).
$?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败.if语句块,就是说明如果上述函数成功之后,执行then语句块。先卸载
storeb,在挂载所有自动挂载设备。
‘肆’ shell脚本错误问题
错误提示中已经说了:
首先yesterday函数中 line 1 有问题
oset=`echo $TZ|tr -d '[A-Z+]`
少了一个匹配的单引号啊
这个错误同时也导致line2的错误
另外,楼上说了,脚本第五行(yesterday函数中的第三行)也缺少匹配的双引号。
建议使用 sh -n scripts.sh 来检查脚本是否有语法问题,
然后使用 sh -x scripts.sh 来显示所有语句的执行过程,
这样可以比较清楚地看出哪里出问题了。
‘伍’ shell脚本问题
正确答案,这个是清睿的面试题:
awk '$4>"[13/Apr/2017:15:00:00"&&$4<"[13/Apr/2017:17:00:00"' access.log|awk '{print $1}'|sort|uniq -c|sort -n -k 1 -r|head -n 5
‘陆’ shell脚本问题,文本排版问题
1、shell脚本如下:
#!/bin/bash
:>5.txt
for i in {1..3}
do
for j in {1..4}
do
echo -n `sed -n "${i}p" ${j}.txt` >>5.txt
echo -ne " " >>5.txt
done
echo "" >>5.txt
done
2、执行结果如下:
‘柒’ linux shell脚本的问题
1、第二个括号不能换成其他的,中括号,大括号,双中括号,双括号都不可以,意思都不一样。
2、:-是一起的;fileuser
如果有值的话,就用所拥有的值赋予给filename变量;无值的话,就把filenname赋予给fileuser,再赋予给filename变量
3、大括号可以不要,大括号里不做如何的参数变化可以舍去。
你最好修改下:
#!/bin/bash
read
-p
"please
you
nmae
"
fileuser
date=$(date
--date='2
day
ago'
+%Y%m%d)
filename=${fileuser:-"filename"}
file=$filename$date
touch
$file
这样或许能更好体现出意义来
‘捌’ 一道shell脚本问题,在线等,谢谢
#!/bin/bash
j=0
foriin`sed-n/zhangsan[[:blank:]]/pa.txt|gawk'{print$2}'`
do
j=$[$i+$j]
done
echo$j
‘玖’ Linux shell脚本问题,请高手解答
expr运算中,运算符两侧都要有空格的,除此格式错误外其他没有错误!
另外,` `内的命令及shell外部命令(如expr)都会新建子shell去执行,开销大。强烈建议用shell内建命令let做基本运算。
number=`expr $number + 1`
sum=`expr $sum + $number`
可以改为:
let number+=1
let sum+=number
let支持C语法运算,变量前可以不加$取值符号;支持使用+=运算符,a+=b等同于a=a+b,可以让代码更简洁高效。
用let时运算表达式如果有空格,要放入双引号中,如:
let sum="sum + number"
‘拾’ Linux的Shell脚本编程问题求教,具体题目如下。
先占下楼层,空了慢慢给你做!
先做第一题1月12日:
#!/bin/bash
echo this "date" :`date`;
echo this "cal" :`cal`;
echo this "pwd" :`pwd`;
echo this "ls" : `ls`.
第二题1月12日:
这个没法写了撒 太笼统;建议翻翻书。
我列个环境变量的例子吧:
#!/bin/bash
echo "第二题":
TEST_DIR=/root
export $TEST_DIR;
echo "环境变量TEST_DIR是/root".
第三题1月12日:
#!/bin/bash
echo "第三题for":
echo "3.1 for"
x=0
for ((i=1 ; i<101 ;i++));
do
x=$(($x+$i))
done
echo $x
echo "---------------------------------"
echo "第三题while":
echo "3.2 while"
x=0
i=1
while [ $i -lt 101 ]
do
i=$(($i+1))
x=$(($x+$i))
done
echo $x
第三题第二个
#!/bin/bash
echo "3.2"
function fib {
if [ $1 -lt 2 ]; then
echo -n $1
else
local n_2=$(($1 - 2))
local n_1=$(($1 - 1))
local f_n_2=$(fib $n_2)
local f_n_1=$(fib $n_1)
local f_n=$((f_n_2 + f_n_1))
echo -n $f_n
fi
}
n=10
for ((i = 0; i < $n; i++))
do
printf "fib(%2d) = %d\n" $i $(fib $i)
done