十分钟学会shell,shell入门基础

标签: shell shell 基础 | 发表时间:2014-02-26 23:51 | 作者:
出处:http://www.iteye.com

shell介绍:

 

#为什么使用shell脚本?

shell脚本实现自动化运维 可以自动化管理系统

 

#查看系统中支持的所有shell类型

#cat /etc/shells

#chsh -l

 

#如何切换shell

直接输入shell的名字

例: #ksh

切换到ksh

sh,bash,nologin,tcsh,csh,ksh

 

#查看当前使用的shell

#echo $SHELL

 

#bash功能和特点

1 命令和文件自动补齐

2 历史记录功能 上下键、!number、!string、!$、!!、^r

3 别名功能      alias、unalias cp、~username/.bashrc、\cp -rf /etc/hosts .

4 快捷键 ^c、^d、^a、^e、^l、^s、^q

5 前后台作业控制 &、nohup、^c、^z、bg、fg %1、kill %3

6 输入输出重定向 0,1,2,  >,  >>,  2>,  2>>,   2>&1,  &>,   <,    cat <<EOF,  cat >file1 <<EOF

7 管道 | tee ip addr |grep 'inet ' |tee -a test |grep eth0 -a 追加

8 命令排序

; 不具备逻辑判断

&& 具备逻辑判断

       || 具备逻辑判断

9 shell元字符表示的不是本意

* ? & ; $ [] () {} \

10 变量

11 shell script  脚本

 

#如何执行shell脚本

1 # source demo.sh 不需要执行权限 在当前shell中执行

2 # . demo.sh 不需要执行权限 在当前shell中执行

3 # sh demo.sh 不需要执行权限 在子shell中执行

  # sh -x demo.sh 以调试的方式执行

  # sh -n demo.sh 仅调试 syntax error

4 # bash demo.sh 不需要执行权限 在子shell中执行

5 # ./demo.sh 需要执行权限 在子shell中执行

 

#修改shell脚本执行权限

#vim demo.sh

#chmod a+x demo.sh

 

shell变量

#什么是变量?

用一串固定的字符来保存经常变化的字符

 

#变量的类型

1 自定义变量

用户在编写脚本时根据自己的需求定义的变量

2 系统环境变量

系统在启动的过程中读取自己的配置文件定义的变量

PATH=/bin/:$PATH

3 位置变量

$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

4 预定义变量

$* $@ $# $$ $?(上一个命令的返回值 0表示成功)

 

#变量的定义

例: #name=gaoyaohua

变量名字=变量值

注: 变量名命名必须以字母或下划线开头

区分大小写字母

例: #export name=gaoyaohua

例: #wo=gaoyaohua

#export wo 

export把变量定义为全局环境变量(当前shell跟子shell都有效)

 

#变量的取消

例: #unset name

 

#变量的查看

#set //显示系统内的所有变量,包括自定义变量

#env //只显示系统环境变量,不会显示自定义变量

 

#变量的调用

例: #echo $name

   $变量名

例: #echo 'your name is $name.'

' ' 单引号 变量原样输出(弱引用)

例: #echo "your name is $name."

" " 双引号 变量被变量值取代(强引用)

 

#创建数组变量

方法一: 一次赋一个值

数组名[下标]=变量值

# array[0]=pear

# array[1]=apple

# array[2]=orange

# array[3]=peach

 

方法二: 一次赋多个值

# array=(tom jack alice)

# array=(`cat /etc/passwd`) 希望是将该文件中的每一个行作为一个元数赋值给数组array3

# array=(`ls /var/ftp/shell/for*`)

# array=(tom jack alice "bash shell")

 

# declare -a

declare -a array='([0]="pear" [1]="apple" [2]="orange" [3]="peach")'

declare -a array='([0]="tom" [1]="jack" [2]="alice")'

 

访问数组元数:

# echo ${array[0]} 访问数组中的第一个元数

# echo ${array[@]} 访问数组中所有元数  等同于 echo ${array1[*]}

# echo ${#array[@]} 统计数组元数的个数

# echo ${array[@]:1} 从数组下标1开始

# echo ${array[@]:1:2} 从数组下标1开始,访问两个元素

 

条件语句:

#整数值比较

[ 整数1 选项 整数2 ]

-ne 不等于

-eq 等于

-ge 大于等于

-le 小于等于

-gt 大于

-lt 小于

#字符串比较

[ 字符串1 比较符 字符串2 ]

== 或 =

!=不等于

-z 测试字符串是null的时候为真

#逻辑比较

[ 表达式1 ] 符号 [ 表达式2 ] 符号 [ 表达式3 ]

&& -a and

|| -o or 

 

流程控制:

# 条件语句

单分支

if[ 条件表达式 ];then

echo "demo 1"

fi

双分支

if [ 条件表达式 ]

then

echo  "demo2"

else

echo  "demo3"

fi

多分支结构

if [ 条件表达式 ];then

echo "demo 1"

elif [ 条件表达式 ];then

echo "demo 2"

elif [ 条件表达式 ];then

echo "demo 3"

elif [ 条件表达式 ];then

echo "demo 4"

else

echo "demo 5"

fi

 

#循环语句

for

for 变量名 in 变量值列表

do

echo "demo 1"

done

 

while

while 条件表达式

do

echo "demo 1"

done

until

until 条件表达式

do

echo "demo 1"

done

 

#选择语句

case

case $变量名 in

模式1)

echo "demo 1"

;;

模式2)

echo "demo 1"

;;

模式3)

echo "demo 1"

;;

*)

echo "demo 1"

;;

esac

 

例子:

select choice in green blue red quit "bash shell"

do

       case $choice in

               red)

                       echo "红色"

                       ;;

               green)

                       echo "绿色"

                       ;;

               blue)

                       echo "蓝色"

                       ;;

               *)

                       exit

       esac

done

 

 

函数:

#函数

完成特定功能的代码片段(块)

在shell中定义函数可以使用代码模块化,便于复用代码

函数必须先定义才可以使用

 

#定义函数的方法

方法一:

函数名() {

函数要实现的功能代码

}

 

方法二:

function 函数名 {

函数要实现的功能代码

}

 

#调用函数的方法

函数名

函数名 参数1 参数2

 

 

 

exit

break

continue

shift

 

shift 作用:使位置参数向左移动,默认移动1位,可以使用shift 2

exit  退出整个程序

break 结束当前循环,或跳出本层循环

continue 忽略本次循环剩余的代码,直接进行下一次循环

 

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [shell shell 基础] 推荐:

十分钟学会shell,shell入门基础

- - ITeye博客
#为什么使用shell脚本. shell脚本实现自动化运维 可以自动化管理系统. #查看系统中支持的所有shell类型. 直接输入shell的名字. #查看当前使用的shell. 2 历史记录功能 上下键、!number、!string、!$、!!、^r. 3 别名功能      alias、unalias cp、~username/.bashrc、\cp -rf /etc/hosts ..

Shell编程

- - 博客园_首页
本来打算寒假回家好好学习Linux的,为以后学习嵌入式打好基础的. 回家之后的学习效率非常低,之前为了搭建Linux环境,折腾了很长时间,学到现在也就勉强才把Shell编程学完了. 今天就把自己学习的相关知识点总结整理一下. 个人感觉shell程序跟windows下的批处理文件有点像,就是将一些系统命令写进一个可执行文件中,然后执行.

shell 学习笔记

- tiger - 游戏人生
将脚本目录加到 PATH 中. 在 dash 中如何进行字符串替换. 将 rst 格式文档转换为 blog 可用的 html 代码. shell 脚本虽然不是非常复杂的程序, 但对于首次接触的我来讲, 多少还是有些忌惮. 不过, 接触任何新事物都需要勇敢面对, 逐步树立信心. 我是冲着把脚本写好去的, 所以, 我的目标是能够写出友好, 健壮, 优美的脚本..

GNOME Shell 3.2 预览

- timebug - LinuxTOY
近日 Allan 在他的博客上分享了最近在 GNOME Shell 3.2 上的开发进度. 整合聊天和消息程序(由 Guillaume Desmottes 开发). 登陆系统时自动登陆聊天服务,不再需要额外启动聊天程序. 直接在 Shell 即可语音通话,回复聊天邀请,文件传输. 通知计数器(由 Guillaume Desmottes 开发).

Ubuntu11.10 GNOME Shell指南

- 个人 - 译言-每日精品译文推荐
Ubuntu 11.10终于提供了一种安全方便的方式去安装和使用“GNOME Shell”——GNOME的新桌面交互接口. 这意味着不像之前的版本那样,现在它不需要任何额外的插件,或者执行任何可疑的脚本它可以从Ubuntu软件中心直接安装,只需一次简单的点击. 为了在ubuntu上获得更好的体验我们需要安装一些额外的插件.

Shell 小技巧一则

- Hinc - LinuxTOY
经常与 Shell 为伍的你是不是也会经常碰到下面这些情境:. 要保存某些文件到特定目录,然后开始查看/编辑 1$ cp /somewhere/foo.c /somewhere/foo.c.orig 2$ vi /somewhere/foo.c. 或者先备份某个文件,然后开始捣鼓 1$ tar zcvf archives.tgz /somewhere/folder /and/somewhere/file1 /and/somewhere/file2 2$ scp archives.tgz [email protected]:~/blabla/.

ibus的GNOME Shell扩展

- 小汐 - 画猫不成反类虎
更新代码,支持横排模式(设置后需要重启gnome shell). 这个扩展使用了ibus的一些新API,该API还没有发布,需要自行编译ibus的git仓库代码. 以前说过GNOME3的一个缺点,在通知栏聊天时,无法看到ibus的候选词界面,确切地说是候选词界面被通知栏聊天界面挡住了. 这是GNOME Shell的架构所决定的,目前没有方法可以绕过(除非修改GNOME Shell)本身.

移植Google Calendar到 GNOME Shell

- 欧剃 - 笨兔兔
GNOME Shell Google Calendar 将Google 日历移植到了GNOME Shell上. python脚本可保存密码,自动获取新的谷歌日历事件. 但目前没有图形化的配置界面,导入日历. GNOME 3.2(+3.1.90.x) 目前通过“Online accounts”已经移植了谷歌日历,但是只能在上述版本中实现.

Ubuntu 11.10 GNOME Shell 指南

- 雪冬 - 笨兔兔
注,本文由笔者翻译自 http://www.omgubuntu.co.uk/2011/10/gnome-shell-ubuntu-11-10-guide/. Ubuntu 11.10最终提供给喜欢猎奇的用户一个简单安全的方式来安装和尝试“GNOME Shell”——新的GNOME桌面接口. 这意味着不像之前的Ubuntu发行版,在Ubuntu中安装GNOME Shell不需要添加额外的软件源(PPA)或运行各种脚本:如今它可以在Ubuntu软件中心直接安装——只需要简单地点击一下鼠标即可完成.

Linux shell用法和技巧

- - 外刊IT评论
使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和l技巧. 当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务. 于是,我开始在一个文本文件里记录这些用法,并放在我的Dropbox里,现在,向大家分享这个文件. 需要注意一点的是,有些用法需要在你的Linux系统里安装额外的软件.