Bash入门
unix吧
全部回复
仅看楼主
level 7
来,让我们开始写第一个Shell Script。
#!/bin/bash
# 0.HelloWorld
# Copyright (C) 2013 Holyzer
echo "HelloWorld"
exit
2013年06月14日 03点06分 1
level 7
第二个程序,要求用户输入自己名字和年龄,保存到当前目录下的DB文件下。
#!/bin/bash
# 1.Read.sh
# Copyright (C) 2013 Holyzer
echo -e "\t\tWelcome Use" #e参数为扩展含义,具体单词我不记得了
read -p "Input Name:" Name #p参数为print含义,记住后面的变量不需要加$
#读用户输入的数据到Name变量
read -p "Input Age:" Age #同上
echo "==========================" >> DB #输出重定向追加到DB文件中
echo "Mr $Name" >> DB #同上
echo "Age:$Age" >> DB
echo "==========================" >> DB
more DB #查看DB文件
exit #正常退出Shell Script
2013年06月14日 03点06分 2
level 7
运行shell脚本的方法:
另外,如果写出的脚本能兼容原始shell。BXXXX Shell.
1.可以直接键入sh 脚本名称 方式来运行。
2.修改脚本权限,chmod a+rwx 文件.sh 或者chmod 777 文件.sh。然后./*.sh直接运行
3.直接/bin/bash 文件名.sh(需要x权限)
2013年06月14日 03点06分 3
用“.”也可以
2013年06月16日 19点06分
上面有写。
2013年06月17日 09点06分
回复 awabimakoto :请问用.怎么执行,我也看到部分书籍上有说到:$ . ScriptName 可是我怎么试都不行啊,烦请赐教!
2013年06月19日 07点06分
回复 深爱computer :相当于文中提到的sh 脚本名,用.代替sh即可。只是一种简化,没有本质区别。记得点后有个空格哦。不过我建议用改执行权限的方法,因为有时是其他语言的脚本。
2013年06月19日 11点06分
level 7
我会不定期的更新,希望可以帮到大家。如果大家有什么疑问,可以[email protected]给我。
2013年06月14日 03点06分 4
level 7
第三个程序,关于正常关机的问题。
正常关机是用sync把缓冲区的数据统统写入内存,以防止关机后数据丢失。

#!/bash/bash #
脚本解释器的绝对路径
# 2.Power_OFF.sh
# Copyright (C) 2013 Holyzer
sync;sync;sync; #;符号是命令分隔符号,就是同时运行若干条命令,用;符号隔开
poweroff #关机
exit
2013年06月14日 03点06分 5
第一句错了吗?#!/bin/bash吧?
2013年12月30日 16点12分
而且貌似没有关机诶,poweroff : command not found,是不是基于Unix的系统已经不适用poweroff作为关机命令了?Mac OS X环境下[疑问]
2013年12月30日 16点12分
@oyang716 好吧,我马虎了!确实错了……
2014年06月18日 12点06分
回复 深爱computer :[勉强]难免马虎,老大请继续更新!
2014年06月21日 04点06分
level 7
介绍完;符号,我来说说重定向符和管道符,以及换行符和分隔符号。
下班了,下午再说!
2013年06月14日 03点06分 6
level 7
不错,给新手们弄个这东西也不错。
2013年06月17日 12点06分 7
level 7
放假回来了,昨晚喝醉酒了。今天头好痛,以后再也不干这样的事了。好好学习,天天向上。
2013年06月18日 01点06分 8
level 7
换行符:\
Unix和C是兄弟,大家都知道,C离开了Unix之后是什么样大家都知道,比如说微软版的C。
也就是说,Unix和C是密切相关的,Unix具有C的特性。
先看看C中预处理和语句中的换行。
#define CONST \
"Love Unix"
printf("I Love \
Unix");
然后命令中是怎么回事呢?
例如一行太长了,你想分多行,就可以这样做
如cp /etc/motd \
> ~
然而你也可以直接键入\
>ls
是不是一样呢?
#作用是一行命令换成两行。
\
>#回车键
[root@HolyzerRHEL6 ~]#
这样看看?
[root@HolyzerRHEL6 ~]# \
>echo -e \
>"\aGo"
[root@HolyzerRHEL6 ~]#
做做实验吧,我说一大堆你也理解不了,你还是自己动手,马上就能知道是个什么东西。
2013年06月18日 02点06分 9
作用就是.如果有时候一行代码太长.看起来不美观.就可以直接用 \ 来分行
2013年07月04日 01点07分
回复 枫哥000 :mark
2014年05月01日 06点05分
level 7
我觉得重定向要放到后面讲,我先说一下命令替换和管道符号。
命令替换:`(想要这个字符吗?它在ESC的下面,1的左边。)
#########################################################################
我用实例跟大家讲吧,先看一下。
#!/bin/bash
#
# PWD.sh
# Copyright (C) 2013 Holyzer
# 2013-6-18 10:27
#
Back_Green="\033[42m" #背景颜色代码[绿色]
Default_TTY="\033[0m" #默认值代码
echo -e "Work Directory:"$Back_Green"`pwd`"$Default_TTY
exit 0
2013年06月18日 02点06分 10
level 7
没人来看就算了,我就不写了。
2013年06月18日 02点06分 11
建议在中文说明前加入注释符号。。。自己一行一行删麻烦。。。
2013年06月18日 14点06分
好的,我会改善,但是我觉得学习的话,直接复制是很不好的习惯,不管看懂不看懂,都要一个一个敲出来。
2013年06月19日 07点06分
level 12
写的非常好
2013年06月18日 07点06分 12
level 7
#好,我改善这些,以后#
开头的统统仅仅是学习内容。
#今天学习管道符的作用。
#管道符号指的是一个命令的输出作为另外一个命令的输入(也就是参数)
#不多说,直接做,慢慢就会领悟,理论只给了你领悟的过程,不能帮你领悟这一切。
#需求,统计用户目录下的.bash_history数字个数,要求管道操作。
[XXXX@XXXX ]$cat ~/.bash_history | wc
#把cat的输出作为wc的输入(参数的一部分)
#可能上面你会觉得很白痴,嘿,我直接wc .bash_history不是一样可以得到我想要的答案
#吗?很抱歉,我只是随便举个例子,目的是了解管道操作符。
#好吧,我们来点有用的。
#我以Unix Like之RHEL6为例子,因为Bash优点多多啊,而几乎每个Linux都拥有一个Bash。
#当你想查看一下安装了哪些应用程序,该怎么办?
[XXX@XXXXXX ]$rpm -qa
#是不是看到了呢?
#可是这么多,看的我眼花缭乱啊,怎么办呢?
#grep可以帮助你。
[XXX@XXXXXX ]$rpm -qa | grep gcc
compat-gcc-c++-7.3-2.96.118
gcc-java-3.2.2-5
gcc-c++-3.2.2-5
libgcc-3.2.2-5
compat-gcc-7.3-2.96.118
gcc-3.2.2-5
gcc-g77-3.2.2-5
#是不是找到了你想要的信息?
#同上,rpm的输出内容输入给grep
2013年06月19日 08点06分 14
level 7
#没有用more做例子是因为,不了解more的情况下去用more,会误导大家,我就是例子。
2013年06月19日 08点06分 15
level 7
#接下来学习:返回值、echo命令,sleep命令。
2013年06月19日 08点06分 16
level 7
返回值和$?:
假设Bash Script是你学习的第一门计算机语言,完全零基础。
对于返回值,我不想深入太多,毕竟这个知识点实在是不难。
返回值,就是指一个返回来的值,好像有点绕口。
你应该知道工厂吧?
工厂的流程大家都知道:
材料进工厂 > 处理 > 出货
程序设计也是这样的,当然,程序也有个像现实世界中的工厂,材料进厂(参数),加工数据(处理),出货(返回值)。这个类似工厂的东西,名称也因语言而异,例如C中的函数,Pascal中的过程,Java中的方法。
2013年06月19日 08点06分 17
暂时叫他函数,因为在Bash也是叫函数,不过好像Pascal中的过程是没有返回值的,额,忘了。 每个程序都会返回一个值给操作系统,这个值就是返回值,目的是判断程序是否正常结束。我们可以通过Bash来查看程序的返回值问题。
2013年06月19日 08点06分
level 7
讲的不对还请不略赐教。
现在我们来写一个C语言程序。
不知道你们装了编译器没有,可能你们会问我为什么不用Bash实现。好吧,这个入门贴其实是我的学习贴,分享给大家而已,我还没学到Bash返回值的那里啊,所以,嘿嘿~~~
这个C程序的目的是返回一个值,然后我们通过Bash来查看它结束后给操作系统的值。
/*
* Return_.c
* Copyright (C) 2013 Holyzer
* 2013-6-19 16:45
*/
#include <stdio.h>
int main(int argc,char * argv[])
{
if(argc < 2) //如果参数小于2个
{
return 1; //直接返回1
}
else //否则
{
return argc; //有多少个参数就返回几
}
return 0; //默认返回0 这个好像是废话。因为前面不可能没有执行return语句,但是还是充当一下场面吧,而且如果不写它貌似编译不过啊。
}
随便保存为什么名字,但是结尾要是.c,例如Return.c
编译他:gcc -Wall Return.c -o Return
生成一个Return二进制执行文件,然后我们来执行咯。
./Return 2 3 4 5 6
echo $?
是不是显示6?
他不会一直都是显示6吧?不是的,这真的是上一个程序结束时返回给操作系统的,操作系统保存到$?里面,不相信?
再运行echo $?试试
显示0
那是别的程序结束后返回的值。
我们再来改改:./Return 1
是不是数字2?
你可能会问了,我只给了一个参数啊~你不是说那个C程序是给几个参数就返回几吗?
这就是C语言的问题了,因为main是主函数,跟操作系统交互的一个函数,由他开始由他结束,主函数的返回值是给操作系统的,那为什么会是数字2?在命令行中,程序名称也是一个参数哦,这个说起来,你没学过C的话就不是很好理解啦~
2013年06月19日 09点06分 18
在bash里 echo $? 就是返回上一个命令的执行状态.0 是正常
2013年07月04日 01点07分
level 7
好啦,介绍下echo这个不可缺少的角色。
echo:打印字符串到TTY
常用的参数有哪些呢?
-e:启动扩展(扩展一些转义序列)
-E:关闭扩展
-n:Not New Line好像是这个的Not缩写,功能是不换新行
暂时就是这些啦,有个-e参数有能让你的Bash丰富多彩。
假设你没有学过C,那么,我告诉你什么事转义序列。
转义序列能实现特殊功能,但他不被打印出来。
上面的PWD.sh就是做了这样的事情,它使用了颜色代码,让TTY更鲜艳美观。
好吧,我还是列出来吧,如果你学过C就不用看了,因为echo的扩展转义序列,根本是和C一模一样。
\a 通过主板的蜂鸣器鸣叫一声 \t 制表符,相当于在文本编辑器中输入一个Table
\\ 打印一个反斜杠 \n 一个新行,也就是换行 \b 回退,相当于光标往回移动一格。
就列出这些常用的,详情请输入man echo或者info echo
如果你想让蜂鸣器响一声,你可以使用echo -e "\a"就可以做到,其他转义序列的使用方式一样,这里就不一一举例了。
2013年06月19日 09点06分 19
老大,我用的是Mac OS X的bash,从第二个联系开始就有点困惑,echo -e 这个参数对我来说直接输出了是个什么情况,感觉没有任何效果啊,好像没有当成是echo的启动拓展参数就打印出来了?求解答~[勉强]
2013年12月30日 16点12分
@oyang716 老大,Apple的超级计算机,我真的只摸过没用过!你能原谅我这个穷鬼吗?
2014年06月18日 12点06分
@oyang716 老大,Apple的超级计算机,我真的只摸过没用过!你能原谅我这个穷鬼吗?
2014年06月18日 12点06分
@oyang716 老大,Apple的超级计算机,我真的只摸过没用过!你能原谅我这个穷鬼吗?
2014年06月18日 12点06分
level 7
明天再写,快下班了。好想买个机械键盘,毕竟手感很好,敲起来很舒服很舒服,敲代码也一定很舒服。
2013年06月19日 09点06分 20
[哈哈][哈哈][哈哈]
2013年06月20日 12点06分
level 7
很遗憾,我们部门断网了,可能没什么时间给大家写了,只能下班时,有时间就给大家写上一篇吧,谢谢大家支持,给那些给我消息或者给我Mail的朋友说一声:很抱歉,因为工作关系,可能会没什么时间上网给大家继续更新,但是有时间我还是会坚持写下去,我想证明,Unix吧,还是有人的。
2013年06月24日 17点06分 21
1 2 尾页