`
ppooooll
  • 浏览: 46971 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

shell的初学者入门知识

阅读更多
  shell判断文件,目录是否存在或者具有权限

0
推荐
#!/bin/sh

myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"

#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi

#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi

#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi

#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi

#两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
###################################################
shell中的变量展开:
*** 参数展开 ***
参数展开(parameter expansion)是Shell提供变量值在程序中的使用过程;例如作为给新变量的值,或是作为命令行的部分或全部参数。最简单的形式如下所示:
reminder=”Time to go home”  将值存储在reminder中
sleep 120                   等待两分钟
echo $reminder              显示信息

在Shell下,有更复杂的形式可用于更特殊的情况。这些形式都是将变量名称括在花括号里(${variable}),然后再增加额外的语法以告诉Shell做什么。

注意:在默认情况下,未定义的变量会展开为null字符串。程序随便乱写,就可能会导致灾难发生:
rm -fr /$MYPROGRAM      如果未设置MYPROGRAM,就会有很大的麻烦了
所以,写程序时一定要保持清醒的头脑。

*** 展开运算符 ***
第一组字符串处理运算符用来测试变量的存在状态,且为在某种情况下允许默认值的替换。

${varname:-word}    如果varname存在且为非null,则返回其值;否则,返回word。
用途:如果变量未定义,则返回默认值。
范例:如果count未定义,则${count:-0}的值为0。

${varname:=word}    如果varname存在且不是null,则返回它的值;否则,设置它为word,并返回其值。
用途:如果变量未定义,则设置变量为默认值。
范例:如果count未定义,则${count:=0}设置count为0。

${varname:?message} 如果varname存在且非null,则返回它的值;否则显示varname:message,并退出当前命令或脚本。省略message会出现默认信息parameter null or not set。
用途:为了捕捉由于变量未定义所导致的错误。
范例:如果count未定义。则${count:?”undefined!”}将显示count: undefined!,并退出脚本。

${varname:+word}    如果varname存在且非null,则返回word;否则,返回null。
用途:用来测试变量的存在。
范例:如果count已定义,则${count:+1}返回1(也就是“真”)。

注:上述的四个运算符内的冒号都是可选的。如果省略冒号,则将每个定义中的“存在且非null“部分改为”存在“,也就是说,运算符仅仅测试变量是否存在。

*** 模式匹配运算符 ***

以下所有示例中均假设path的初始值为“/home/michael/bin/imailcheck.v1.sh”

${variable#pattern}    如果模式匹配于变量的开头处,则删除匹配的最短部分,并返回剩下的部分。

[11 michael@15:17:25 ~]$ echo ${path#/*/}
michael/bin/imailcheck.v1.sh

${variable##pattern}   如果模式匹配于变量的开头处,则删除匹配的最长部分,并返回剩下的部分。

[13 michael@15:20:08 ~]$ echo ${path##/*/}
imailcheck.v1.sh

${variable%pattern}     如果模式匹配于变量的结尾处,则删除匹配的最短部分,并返回剩下的部分。

[17 michael@15:26:15 ~]$ echo ${path%.*}
/home/michael/bin/imailcheck.v1

${variable%%pattern}   如果模式匹配于变量的结尾处,则删除匹配的最长部分,并返回剩下的部分。

[18 michael@15:26:17 ~]$ echo ${path%%.*}
/home/michael/bin/imailcheck

最后,POSIX标准化字符串长度运算符:${#variable}返回$variable值里的字符长度:

[20 michael@15:30:02 ~]$ x=helloword
[21 michael@15:39:35 ~]$ echo There are ${#x} characters in $x
There are 9 characters in helloword

*** 位置参数 ***

所谓位置参数,指的是Shell脚本的命令行参数;同时也表示在Shell函数内的函数参数。它们的名称是以单个的整数来命名。当这个整数大于9时,就应当用花括号({})括起来。

下面介绍的特殊“变量”提供了对传递的参数的总数的访问,以及一次对所有参数的访问:
$#      提供传递到Shell脚本或函数的参数总数。当你是为了处理选项和参数而建立循环时,它会很有用。

while [ $# != 0 ]
do
case $1 in

esac
shift
done

$*, $@  一次表示所有的命令行参数。这两个参数可用来把命令行参数传递给脚本或函数所执行的程序。

“$*”    将所有的命令行视为单个字符串。等同于”$1 $2 …”。

“$@”    将所有的命令行参数视为单独的个体,也就是单独字符串。等同于”$1″ “$2“ …。
查看源代码
打印帮助
01 [23 michael@16:15:39 ~]$ set -- hello "hi there" greetings
02 [24 michael@16:16:00 ~]$ echo there are $# total arguments
03 there are 3 total arguments
04 [25 michael@16:16:17 ~]$ for i in $*
05 > do echo i is $i
06 > done
07 i is hello
08 i is hi
09 i is there
10 i is greetings
11 [26 michael@16:16:36 ~]$ for i in $@
12 > do echo i is $i
13 > done
14 i is hello
15 i is hi
16 i is there
17 i is greetings
18 [27 michael@16:16:54 ~]$ for i in "$*"
19 > do echo i is $i
20 > done
21 i is hello hi there greetings
22 [28 michael@16:17:21 ~]$ for i in "$@"
23 > do echo i is $i
24 > done
25 i is hello
26 i is hi there
27 i is greetings
28 [29 michael@16:17:40 ~]$ shift
29 [30 michael@16:18:08 ~]$ echo there are now $# arguments
30 there are now 2 arguments
31 [31 michael@16:18:18 ~]$ for i in "$@"
32 > do echo i is $i
33 > done
34 i is hi there
35 i is greetings

*** 其它常见特殊变量 ***
#       目前进程的参数个数
@       传递给当前进程的命令行参数。置于双引号内,会展开为个别的参数。
*       当前进程的命令行参数。置于双引号内,则展开为单独参数。
-       在引用时给予Shell的选项
?       前一命令的退出状态
$       Shell进程的PID
0       Shell程序的名称
HOME    登陆目录
IFS     内部的字段分隔符;例如作为单词分隔器的字符列表。一般设置为空格,制表符,以及换行符。
PATH    命令的查找路径
PPID    父进程的进程编号
PWD     当前的工作目录
#######################################################

例子 rename 's/\.bak$//' *.bak 是将所有文件的.bak扩展去除

例子 rename 'y/A-Z/a-z/' * 是将所有文件中的大写字母转为小写

#######################################################


1   while read line
2   do
3    $echo $line
4   done < in.txt
分享到:
评论

相关推荐

    给shell初学者的入门知识.pdf

    ### 给Shell初学者的入门知识详解 #### 一、Shell程序基础 ##### 1.1 Shell程序概念 - **定义**: Shell程序本质上是一个包含了多条Shell或Linux命令的文件。 - **创建**: 使用文本编辑器(如VI)来编写Shell程序...

    Linux初学者入门教程pdf

    Linux初学者入门教程是针对那些对Linux操作系统感兴趣但缺乏基础知识的人群设计的教育资源。Linux是一种免费、开源的操作系统,它的核心在于Unix哲学,强调简洁、模块化和可移植性。本教程将帮助初学者理解Linux的...

    Linux初学者入门优秀教程+LINUX循序渐进+linux初级篇

    本教程集合了“Linux初学者入门优秀教程”和“LINUX循序渐进”以及“linux初级篇”,旨在帮助新手快速理解并掌握Linux基础操作。 首先,"Linux初学者入门优秀教程"可能涵盖以下内容: 1. **Linux简介**:解释Linux...

    Linux Shell编程从入门到精通

    本书由浅入深、循序渐进地详细讲解了LinuxShell编程的基本知识... 本书适合于Linux Shell编程的初学者,有一定LinuxShell编程基础,但还需要进一步提高的人阅读。本书对于有一定编程经验的程序员也有很好的参考价值。

    Linux初学者入门资料

    "Linux初学者入门资料"这个压缩包提供了丰富的资源,帮助新接触Linux的用户逐步熟悉这个开源操作系统。 首先,我们要了解Linux。Linux是一种自由、开放源代码的操作系统,它基于Unix,由全球各地的开发人员共同维护...

    shell脚本初学者使用

    ### shell脚本初学者使用知识点 #### 1. Shell基础概念 Shell是用户和操作系统之间的接口,它是一个命令行解释器,用来解释用户输入的命令。Shell脚本是包含一系列命令的文本文件,能够被Shell执行,以完成特定的...

    Shell基础——Shell入门资料

    这篇“Shell基础”资料为初学者提供了全面的Shell入门指南,帮助你掌握这一强大的工具。 1. **什么是Shell?** Shell是Linux系统中的一个程序,它提供了一个交互式环境,让用户通过文本命令来控制计算机。常见的...

    Linux初学者入门优秀教程.rar

    Linux初学者入门优秀教程是一个非常宝贵的资源,专为那些刚刚接触Linux系统的人设计。Linux是一种免费、开源的操作系统,它的开放源代码特性使得用户可以自由地定制和改进系统,吸引了大量的开发者和爱好者。本教程...

    Linux初学者入门优秀教程

    总之,"Linux初学者入门优秀教程"会为你提供全面的Linux基础知识,帮助你从零开始,逐渐熟悉并掌握这个强大的操作系统。无论是为了职业发展还是个人兴趣,学习Linux都将打开一扇通向技术深度和广度的大门。

    Linux初学者入门pdf

    在Linux初学者入门的PDF教程中,通常会涵盖以下几个关键知识点: 1. **Linux历史与哲学**:介绍Linux的起源、发展过程以及它背后的自由软件运动。还会解释Linux与Unix的关系,以及Linux的哲学——“一切都是文件”...

    Linux.Shell编程从入门到精通详解

    本书适合于Linux Shell 编程的初学者,他们可以通过本书快速入门,逐步深入学习。同时,已经有一定基础但是需要进一步提升的读者,也可以从本书中获得帮助。对于有一定编程经验的程序员,本书也提供了很好的参考价值...

    ubuntu初学者入门教程

    ### Ubuntu初学者入门教程知识点详解 #### Ubuntu的发音与涵义 - **发音**:Ubuntu的正确发音为 /ʊˈbuːntuː/,类似于“乌班图”。 - **涵义**:Ubuntu一词源于非洲语言,代表一种人文精神,强调人与人之间的...

    shell编程入门经典--LINUX与UNIX Shell编程指南 (中文pdf版)

    《LINUX与UNIX Shell编程指南》是一本专为初学者设计的shell编程教程,它深入浅出地介绍了在Linux和UNIX系统中如何使用Shell进行高效自动化任务处理。Shell编程是Linux和UNIX系统中的核心技术,它允许用户通过命令行...

    linux shell 变成从入门到精通

    张昊版的《Linux Shell变成从入门到精通》为初学者提供了全面而深入的学习路径,旨在帮助读者从零基础快速掌握Shell编程。 在Linux系统中,Shell作为用户与操作系统内核之间的接口,提供了丰富的命令行工具和脚本...

    shell脚本入门到精通教程

    这篇“Shell脚本入门到精通教程”旨在为初学者和网络自动化运维人员提供全面的学习资源,同时也适合那些希望提升网络系统管理技能的学生。 首先,我们需要了解Shell的基础知识。Shell是一种命令解释器,它作为用户...

    shell脚本编程入门

    本文将深入浅出地介绍Shell脚本编程的基础知识,帮助初学者快速入门。 首先,我们要了解什么是Shell。Shell是操作系统提供的一个接口,它允许用户与操作系统内核进行交互。在Linux中,常见的Shell有Bash(Bourne-...

    Linux零基础学习笔记 Shell编程-菜鸟入门(超详细)

    本文将深入浅出地介绍Linux的基础知识,特别是Shell编程,为初学者提供一个全面的学习路径。 首先,我们需要理解Linux的核心概念。Linux是一种类Unix操作系统,它的核心是一个内核,负责管理硬件资源,而用户通过...

    《unix入门初学者教程》

    《Unix入门初学者教程》是一本专为对Unix操作系统感兴趣的初学者设计的教育资源。Unix,作为一款历史悠久且功能强大的多用户、多任务操作系统,对于理解计算机系统底层运作和提升编程效率有着不可忽视的价值。本教程...

Global site tag (gtag.js) - Google Analytics