Linux Shell 编程

Lonelywolf1899 2010-05-11 10:35:36
照着书上,写了下面的程序。

第一步,打开vi,输入下面的程序
#! /bin/bash
clear
echo ""
echo "1. Display a telephone number"
echo "2. Add a new telephone number"
echo ""
echo "Enter your selection"
保存为 mymenu 文件

第二步,chmod 711 mymenu

第三步,执行的时候,运行mymenu,结果出现错误提示:bash: mymenu: command not found

书上也说,如果运行有问题,试着运行 ./mymenu (但是没有说为什么)

我运行了 ./mymenu ,结果正确。

我就想知道为什么?运行 mymenu 不行,./mymenu 就可以了呢?

谢谢!请高手赐教!!

^_^
...全文
193 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
hao123456. 2010-05-11
  • 打赏
  • 举报
回复
./mymen当前文件路径啊,执行任何一个文件都是以.\开头啊
qihuanfengyun 2010-05-11
  • 打赏
  • 举报
回复
...

echo $PATH
Lonelywolf1899 2010-05-11
  • 打赏
  • 举报
回复
输入指令 $PATH ,怎么不能显示环境变量了?
qihuanfengyun 2010-05-11
  • 打赏
  • 举报
回复
export PATH=$PATH:/tmp/project

还可以修改bash的配置文件。
Lonelywolf1899 2010-05-11
  • 打赏
  • 举报
回复
谢谢大家 的回答。

我试了2楼的方法,把mymenu 拷贝到 bin 目录下,是可以 直接运行 mymenu 的;

我的程序是保存在/tmp/project 目录下的,再请问,怎么把我的目录加到环境变量中呢?

^_^
ecjtunh 2010-05-11
  • 打赏
  • 举报
回复
楼上正解,先查查环境变量
pottichu 2010-05-11
  • 打赏
  • 举报
回复
我就想知道为什么?运行 mymenu 不行,./mymenu 就可以了呢?
================================

./mymenu 表示运行当前目录下的 文件

mymenu 表示运行系统 PATH 目录下 的文件, 你的当前目录不属于系统目录,当然就不能执行了。

如果你

cp ./mymenu /bin/mymenu
那么你就可以直接用 mymenu 了,
或者 export PATH=$PATH:$PWD
这样你也可以直接用 mymenu
qihuanfengyun 2010-05-11
  • 打赏
  • 举报
回复
呵呵,哎路径和环境变量的问题 用./mymenu你是用相对路径指定了要运行的程序,系统直接找到就执行了。

而 mymenu 系统会去环境变量中的指定路径去查找,而你的文件并没有在环境变量包含的路径中。所以找不到报错。
FoxMessire 2010-05-11
  • 打赏
  • 举报
回复
还是没有结贴。我都看明白了。
kewen_liang 2010-05-11
  • 打赏
  • 举报
回复
楼上简洁明了 逻辑清晰 谆谆教诲令我这菜鸟十分感动。哈哈 向楼上学习ing
steptodream 2010-05-11
  • 打赏
  • 举报
回复
在linux里随便敲一个命令 都会去环境变量PATH里找 而默认的PATH一般都是常用命令所在的路径 肯定不包含你现在mymenu所在的路径
你直接执行mymenu 系统回去PATH里找 找不到 所以报错
你把cp ./mymenu /usr/bin/ 再直接执行mymenu 保证就可以了 因为/usr/bin默认是在PATH里的
如果想在当前目录下执行mymenu 就好用 你需要修改环境变量PATH
如果对当前用户生效 vi ~/.bash_profile
追加export PATH=.:$PATH
然后执行source ~/.bash_profile
如果对所有用户生效vi /etc/profile
追加export PATH=.:$PATH
然后执行source /etc/profile
如果你想无论在哪个路径下都能执行/path/下的mymenu
则追加的那句改为
export PATH=$PATH:/path
然后执行source那句
freetstar 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tyqhang 的回复:]

1-10楼说的都对,就不补充了。
[/Quote]
额,不补充了也
steptodream 2010-05-11
  • 打赏
  • 举报
回复
这样简单的问题 前面回答都足够清晰准确了
还有必要明天继续讨论?
Lonelywolf1899 2010-05-11
  • 打赏
  • 举报
回复
谢谢大家的关注,今天下班了,明天继续啊。。。。。。

^_^
weilong8998 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pottichu 的回复:]
我就想知道为什么?运行 mymenu 不行,./mymenu 就可以了呢?
================================

./mymenu 表示运行当前目录下的 文件

mymenu 表示运行系统 PATH 目录下 的文件, 你的当前目录不属于系统目录,当然就不能执行了。

如果你

cp ./mymenu /bin/mymenu
那么你就可以直接用 ……
[/Quote]

正解
tonyzjg 2010-05-11
  • 打赏
  • 举报
回复
学习了
Lonelywolf1899 2010-05-11
  • 打赏
  • 举报
回复
#! /bin/bash
clear
let a=100
let b=200
test a -eq b
echo "$?"

结果是什么啊?
我的结果怎么是 1 (真?)

而当
let a=100
let b=100
的时候,结果反而是 0(假?)

怎么回事?

>_<
wangxs_1984 2010-05-11
  • 打赏
  • 举报
回复
你试一下不就知道了
实际上我想他这里是想要在屏幕上打印 Hello, 同时给Greeting 赋值
但是这句执行完毕后会在屏幕上打印 Hello , 而Greeting在下次使用时却是空值
要想给Greeting赋值 只要 Greeting="Hello," 就可以了 再使用就有值了
Lonelywolf1899 2010-05-11
  • 打赏
  • 举报
回复
书上写的 这一句
echo $Greeting="Hello,"

是什么意思啊?

0_0
wangxs_1984 2010-05-11
  • 打赏
  • 举报
回复
现象是什么报什么错啊?

你的目的是要打印出类似于

Enter your nam
test
Hello, test

这样的结果么?

那写成这样就可以了

#! /bin/bash
clear
Greeting="Hello,"
echo ""
echo "Enter your name"
read FirstName
echo "$Greeting $FirstName"
加载更多回复(4)

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧