新手写shell 积累ing
问题1:
shell 脚本中的变量都是字符 比较的时候 有 test 和 【】 记得空格
这里报错:
read -p "please input Y/N: " yn
if [ $yn == "Y" ]||[ $yn == "y" ] ; then
echo "input yes"
elif [ $yn == "n" ]||[ $yn =="N" ]; then
echo "input No"
else
echo "input error"
fi
执行结果报错:
line 13: [: N: unary operator expected 使用网上查找的 再加一个中括号的方式也没有解决 [[ ]]
用 sh -x test.sh 将每一步用到的shell命令打印出来 然后执行结果
sh [-nvx]
-n 检查sh 有没有语法错误 -v 将程序先打印出来 (view) -x 将执行的程序都打印出来
最后定为在 == 的两侧 不能与变量直接接触 要有空格
在 命令模式 set nu 可以显示行号 怎么让所有的。sh 都显示行号呢 这个应该去修改配置文件
要显示变量的名字 用 echo “$var” 要 显示 “”怎办?? 转义 \” 可以打印 “ 写到这里忽然想起来了帧格式的转义 就是用两个字节 代表一个字节
问题 2:
read -p "please input: " h
if [[ "$1" == "hello" ]]; then
echo "hello,nice to meet you"
#elif [ $1 == " " ];then
# echo "you must input parameter!!"
else
echo "the input is: " " $h"
fi
一直没有得到正确的结果 在 -x 调试的时候发现
1这个参数为空后来去看了一下
# 代表参数的个数
0代表shell脚本的名字
1 代表第一个参数 。。。。$1-9 一共可以有九个参数**
在调用的时候 是这样完成的
ash$ ./hello.sh build test
- 脚本中 0的值就是./hello.sh, 1的值是build,$2的值是test。
bash$ list.sh -sh --debug /home/user
- 脚本中 0的值就是list.sh, 1的值是-sh, 2的值是−−debug, 3的值是/home/user。
当脚本接受命令行参数时,美元符加数字就可以引用这些参数。
在 1 var 我觉得最好还是加上 “” 不知道不加会有什么错误 回头查一下
创建、删除的命令
mkdir (make directiories)
删除
rm -rf filename
问题3
怎么在echo 打印 命令的输出结果
如 echo pwd
可以将pwd 的结果赋值给变量path 再打印
path=$(pwd)#一定要有()
echo "$path"
也可以
echo“ `pwd` ”
将命令结果赋值给变量 var=$(cmd)
如 filelist=$(ls&dir)#列出所在目录下的文件名