资讯专栏INFORMATION COLUMN

Shell 学习笔记2

MkkHou / 1058人阅读

摘要:北京老男孩老师和的用法比较特殊,后期课程慢慢的给大家渗透,现在是学习的刚刚开始啊。再强调下啊同学们和老男孩老师学习,最应该学习的就是这样的学习方法和学习习惯,而不仅仅是技术本文,同学们切记。

第四章 特殊位置参数变量
$0 # 路径
$n # 1~9不用说了,0表示脚本的文件名,大于9,带大括号
$# # 参数的总个数
$* # 不加引号和$@相同,加双引号视为单个字符串,相当于“$1 $2 $3”
$@ # 不加引号和$*相同,加双引号有区别,视为不同的独立字符串,相当于"$1" "$2" "$3" "..."
$n
#  ${1..15} > n.sh # 四个
echo ${1..15} >n.sh # 利用大括号输出15个位置参数并定向到文件 n.sh 里。
echo ${10} # 正确
echo $10   # 不正确

只需要关注特殊变量($1)的内容。

获取脚本的名称及路径
# 写好vi n.sh
sh /server/scripts/n.sh # 输出 /server/scripts/n.sh

# dirname 及 basename
dirname /server/scripts/n.sh # /server/scripts
basename /server/scripts/n.sh # n.sh

# $0
dirname $0 # 输出结果见上面
basename $0

rpcbind 系统脚本

通过 $# 获取脚本传参的个数
[ $# -ne 2 ] && {
  echo "muse two args" 输入除了两个数字或连续字符串,才输出结果。三个以上能不,也不能。
  exit 1
}
echo wyc   # 输入两个数字或连续字符串,才能输出结果。
##########
if [ $# -ne 2 ]
  then
    echo "USAGE:/bin/sh $0 arg1 arg2"  # 输入除了两个数字或连续字符串,输出结果是USAGE:/bin/sh b.sh arg1 arg2。
    exit 1
fi
echo $1 $2 # 输入两个数字或连续字符串,才能输出结果;

$* $@

set -- "I am" man woman.

for i in $@;do echo $i;done  # for i | in "$@"; | do | echo $i; | done |
for i;do echo $i;done

shift
echo $# # 2
echo $1 # man
echo $2 # woman
linux下set和eval的使用小案例解答
本博文主要是讲解学生提出的如下一行命令脚本定义的真正内涵:
runlevel=$(set -- $(runlevel); eval "echo $$#" ) 
以下是老男孩培训14期VIP群内的对话解答记录,内容已做过滤,有的网友以前反映过,说老男孩发的记录时间对不上,其实老男孩只是以对话问答的形式让大家掌握技术而已,内容是加工过的属正常,不要大惊小怪,给大家看的一定是最容易理解的对话过程,也尽量保持了原来的对话。
解答对话:
北京-刘同学(123437415) 2013/4/10 23:01:07
求问一些服务的启动脚本runlevel=$(set -- $(runlevel); eval "echo $$#" ) 这个runlevel是怎么把这个运行级别的取到的
 
北京老男孩老师(49000448) 10:57:44
你敲一下runlevel看看。
 
北京-刘同学(123437415) 10:59:39
[root@G307 ~]# runlevel
N 3
 
北京老男孩老师(49000448) 11:00:31
后面的3就是运行级别

北京-刘同学(123437415) 11:00:39
啊,明白了,他是 $#=2 然后 $2=3是这样吧
老男孩老师点评:对。

北京-陶同学 11:05:19
$# 获取当前shell命令行中参数的总个数
$n 获取当前执行的shell脚本的第n个参数值,n=1,...9,当n为0时表示脚本的文件名,如果n大于9,用大括号括起来${10}
老男孩老师点评:这个同学说的是命令行脚本传参的内容,也适合本文。

北京-李灿(123458724) 11:08:22
eval对echo $$#的双重扫描
假如要的参数不是最后一个 那么这个总数 就不准确了是吧
老男孩老师点评:对的。取最后一个才能这么用。

北京老男孩老师(49000448) 11:09:19
set 和eval的用法比较特殊,后期课程慢慢的给大家渗透,现在是学习的刚刚开始啊。
先给大家一个例子:
[root@oldboy ~]# set -- "I am" handsome oldboy. #==>传入三个参数
[root@oldboy ~]#
[root@oldboy ~]# echo $#    #==>现在有三个参数
3
[root@oldboy ~]# for i in $*;do echo $i;done #==>循环打印这些参数,用$*,无引号
I
am
handsome
oldboy.
[root@oldboy ~]# for i in $@;do echo $i;done #==>在没有双引号的情况下,这里的结果$*和$@是一样的
I
am
handsome
oldboy.
 
北京老男孩老师(49000448) 11:10:22
上面是咱们老男孩培训后期课程教案里的一个例子
 
北京老男孩老师(49000448) 11:12:59
[root@oldboy ~]# set -- $(runlevel)
[root@oldboy ~]# echo $#
2
[root@oldboy ~]# echo $(set $(runlevel); eval "echo $2" )
3
刘同学同学你理解这个吧。这个会了,那个就差不多了
 
北京-刘同学(123437415) 11:13:45
恩,懂了
 
北京老男孩老师(49000448) 11:13:55
set可以像命令行一样设置传参,这个用法不多见!
了解就得,工作几乎不需要必须用它
 
北京-刘同学(123437415) 11:14:20
恩,好的
 
北京老男孩老师(49000448) 11:15:42
既然你懂了,我就在多说下,哈哈!
runlevel=$(set -- $(runlevel); eval "echo $$#" )
1)这里的$#就是参数个数为2,即runlevel的结果, 所以$$#就是$2,即runlevel结果的第二列3
[root@G307 ~]# runlevel
N 3
2)eval就是把echo的字符串,当做命令解析!解答了这么多 其实知识含量已经非常多了。
可以写一篇博文了。
 
北京-李灿(123458724) 11:16:52
echo $ #输出括号内的值
(set $(runlevel); #将runlevel参数值,传入shell,N 3
 eval "echo $2" ) #eval二次扫描,首先扫描到echo输出$2,第二次解析$2的值为等级3
这样子吗?
 
北京老男孩老师(49000448) 11:17:15
GOOD,赞啊!李同学强悍啊,加油,未来是块学习linux的材料,嘿嘿!
 
北京老男孩老师(49000448)  11:33:43
提醒下啊,问完问题 还有点事要做啊
这是老师给老男孩培训的全体同学们解答问题的唯一默认条件。。
总结好,发到咱们群共享里或者传到SVN共享里。
再强调下啊:同学们和老男孩老师学习,最应该学习的就是这样的学习方法和学习习惯,而不仅仅是技术本文,同学们切记。这次我也会发博文总结本次的对话,算是给你们做个榜样吧,下次就是你们了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46278.html

相关文章

  • Linux基础学习笔记(二 理解shell

    摘要:基于命令行与脚本编程大全的学习笔记理解类型系统启动什么样的程序取决于你个人的用户配置,在文件中,在用户记录的第个字段中列出了默认的程序。 Linux(基于《Linux命令行与shell脚本编程大全》的学习笔记) 5 理解shell shell类型 系统启动什么样的shell程序取决于你个人的用户ID配置,在/etc/passwd文件中,在用户ID记录的第7个字段中列出了默认的shel...

    caozhijian 评论0 收藏0
  • Linux基础学习笔记(三 使用Linux环境变量)

    摘要:局部变量只对创建他们的可见。如果是你自己创建的局部变量或是脚本,请使用小写字母。也可以利用这些文件创建自己的永久性全局变量或局部变量。 Linux(基于《Linux命令行与shell脚本编程大全》的学习笔记) 6使用Linux环境变量 环境变量的定义 bash shell使用一个叫环境变量的特性来存储有关shell会话和工作环境的信息,环境变量分为两类: 全局变量 局部变量 全局...

    jzzlee 评论0 收藏0
  • Linux基础学习笔记(四 构建基本脚本)

    摘要:命令允许你在脚本结束时指定一个退出状态码。执行上面的脚本,其执行的状态码为,超过了最大的,所以会被取余为使用命令可以直接查看状态码完 Linux(基于《Linux命令行与shell脚本编程大全》的学习笔记) 11构建基本脚本 脚本运行环境为Centos7 创建shell脚本 shell 脚本的第一行用来指定要使用的shell 格式为 #!/bin/bash 通常使用# 作为shell ...

    Karuru 评论0 收藏0
  • [Note] Linux学习笔记7 shell编程基础

    摘要:编程基础基本概念脚本,一个程序,由可执行的命令组成,以普通文件形式保存运行一个脚本的方法变量,允许使用一些读写存储区,为用户和程序设计人员提供一个暂存数据的区域分为环境变量和用户定义变量环境变量用来定制运行环境,保证命令正确执行,所有环境变 Note 7 Linux Shell编程基础 基本概念 shell脚本,一个shell程序,由可执行的shell命令组成,以普通linux文件形式...

    superw 评论0 收藏0
  • Linux学习笔记

    摘要:但是透过将变量变成环境变量后,就能够在子程序底下应用了很不赖吧至于程序的相关概念,我们会在程序与资源管理章节当中提到的喔范例六如何进入到您目前核心的模块目录每个操作系统核心版本都不相同,以为例,他的预设核心版本是所以,他的模块目录在。 本笔记按照鸟哥的Linux私房菜学习,另,有关Linux下的环境变量PATH方法设定请看该博客:在Linux里设置环境变量的方法(export PATH...

    waruqi 评论0 收藏0

发表评论

0条评论

MkkHou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<