linux shell脚本之-变量极速入门与进阶(1)
1,如果创建shell脚本?
使用任意文本编辑软件,一般为vim,创建.sh结尾的文件,在文件的最开头用 #!/bin/bash 注明shell的类型
如:
ghostwu@dev:~/linux/shell$ cat how_to_use_shell.sh
#!/bin/bash
ls /
2,如何执行shell?
>把shell文件当做bash的命令行参数
ghostwu@dev:~/linux/shell$ ls -l
total
-rwxrwxr-x ghostwu ghostwu 5月 : how_to_use_shell.sh
ghostwu@dev:~/linux/shell$ bash how_to_use_shell.sh
backup cdrom home lib64 mnt proc sbin sys var
bin dev initrd.img lost+found opt root snap tmp vmlinuz
boot etc lib media patch run srv usr www
ghostwu@dev:~/linux/shell$ /bin/bash how_to_use_shell.sh
backup cdrom home lib64 mnt proc sbin sys var
bin dev initrd.img lost+found opt root snap tmp vmlinuz
boot etc lib media patch run srv usr www
ghostwu@dev:~/linux/shell$ bash ~/linux/shell/how_to_use_shell.sh
backup cdrom home lib64 mnt proc sbin sys var
bin dev initrd.img lost+found opt root snap tmp vmlinuz
boot etc lib media patch run srv usr www
ghostwu@dev:~/linux/shell$ sh how_to_use_shell.sh
backup cdrom home lib64 mnt proc sbin sys var
bin dev initrd.img lost+found opt root snap tmp vmlinuz
boot etc lib media patch run srv usr www
>给shell文件添加可执行权限,我这里已经添加过了,使用命令( chmod a+x 脚本文件路径 )
ghostwu@dev:~/linux/shell$ ./how_to_use_shell.sh
backup cdrom home lib64 mnt proc sbin sys var
bin dev initrd.img lost+found opt root snap tmp vmlinuz
boot etc lib media patch run srv usr www
ghostwu@dev:~/linux/shell$ ~/linux/shell/how_to_use_shell.sh
backup cdrom home lib64 mnt proc sbin sys var
bin dev initrd.img lost+found opt root snap tmp vmlinuz
boot etc lib media patch run srv usr www
ghostwu@dev:~/linux/shell$
3,单双引号跟php是一样的,单引号不解释变量,双引号会解释变量
ghostwu@dev:~/linux/shell$ echo "learning shell program with ghostwu"
learning shell program with ghostwu
ghostwu@dev:~/linux/shell$ echo 'learning shell program with ghostwu'
learning shell program with ghostwu
ghostwu@dev:~/linux/shell$ echo learning shell program with ghostwu
learning shell program with ghostwu
ghostwu@dev:~/linux/shell$ name=ghostwu
ghostwu@dev:~/linux/shell$ echo $name
ghostwu
ghostwu@dev:~/linux/shell$ echo "$name"
ghostwu
ghostwu@dev:~/linux/shell$ echo '$name'
$name
ghostwu@dev:~/linux/shell$ echo $name
ghostwu
4,-n,不会转义换行符。-e,会转义字符
ghostwu@dev:~/linux/shell$ echo -n "ghostwu"
ghostwughostwu@dev:~/linux/shell$ man echo
ghostwu@dev:~/linux/shell$ echo "1\t2\t3"
\t2\t3
ghostwu@dev:~/linux/shell$ echo -e "1\t2\t3"
5,打印彩色输出
在终端中生成彩色输出相当好玩,我们可以使用转义序列来实现。
每种颜色都有对应的颜色码。比如:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝
色=34,洋红=35,青色=36,白色=37。
要打印彩色文本,可输入如下命令:
echo -e "\e[1;31m This is red text \e[0m"
\e[1;31 将颜色设为红色, \e[0m 将颜色重新置回。只需要将 31 替换成想要的颜色码就可以了。
要设置彩色背景,经常使用的颜色码是:重置=0,黑色=40,红色=41,绿色=42,黄色=43,
蓝色=44,洋红=45,青色=46,白色=47。
要打印彩色文本,可输入如下命令:
echo -e "\e[1;42m Green Background \e[0m"
ghostwu@dev:~/linux/shell$ echo "\e[1;31m Hello Ghostwu \e[0m"
\e[;31m Hello Ghostwu \e[0m
ghostwu@dev:~/linux/shell$ echo -e "\e[1;31m Hello Ghostwu \e[0m"
Hello Ghostwu
ghostwu@dev:~/linux/shell$ echo -e "\e[1;31mHello Ghostwu \e[0m"
Hello Ghostwu
ghostwu@dev:~/linux/shell$ echo -e "\e[1;31mHello Ghostwu \e[0m!"
Hello Ghostwu !
这个要截图,才能看出效果


变量:
在Bash中,每一个变量的值都是字符串。
无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储
5,反引号(数字1左边的那个键),表示引用命令的执行结果
ghostwu@dev:~/linux/shell$ ls
how_to_use_shell.sh
ghostwu@dev:~/linux/shell$ str=`ls`
ghostwu@dev:~/linux/shell$ echo $str
how_to_use_shell.sh
ghostwu@dev:~/linux/shell$ echo str
str
注意:echo $str 与 echo str。前面表示str变量,后面表示字符串str
反引号的另一种等价写法,用小括号括起来: $()
ghostwu@dev:~/linux/shell$ echo str2
str2
ghostwu@dev:~/linux/shell$ str2=$(ls)
ghostwu@dev:~/linux/shell$ echo $str2
how_to_use_shell.sh
str2=$(ls):取得ls命令执行后的结果赋值给str2这个变量【注意:变量=值, 表示变量赋值,或者改写变量的值,要使用变量的值(访问变量的值)在变量前面用$】
ghostwu@dev:~/linux/shell$ str=`date "+%F"`
ghostwu@dev:~/linux/shell$ echo $str
--
ghostwu@dev:~/linux/shell$ str2=$(date "+%F")
ghostwu@dev:~/linux/shell$ echo $str2
--
变量引用的应用:可以把变量返回的值,拿来作为其他的应用,如时间的返回值,常用来备份文件
ghostwu@dev:~/linux/shell$ tar czvf `date "+%F"`_shell.tar.gz how_to_use_shell.sh
how_to_use_shell.sh
ghostwu@dev:~/linux/shell$ ls
--28_shell.tar.gz how_to_use_shell.sh
6,引用命令行的参数,用$1..$9,大于10用大括号括起来,如:${10}
ghostwu@dev:~/linux/shell/how_to_use_var$ cat var.sh
#!/bin/bash
echo $ $ $ ${}
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh {a..z}
a b c j
给var.sh传入26个字母作为参数, a--->$1,b--->$2, c----->$3, j---->$10
7,$0表示脚本本身
>如果用bash单纯执行脚本,$0就是脚本的名称
>如果用全路径执行脚本,那么$0就是脚本的名称+路径
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh
var.sh
ghostwu@dev:~/linux/shell/how_to_use_var$ bash ~/linux/shell/how_to_use_var/var.sh
/home/ghostwu/linux/shell/how_to_use_var/var.sh
8,dirname获取脚本的路径,basename获取脚本名称
ghostwu@dev:~/linux/shell/how_to_use_var$ dirname ~/linux/shell/how_to_use_var/var.sh
/home/ghostwu/linux/shell/how_to_use_var
ghostwu@dev:~/linux/shell/how_to_use_var$ basename ~/linux/shell/how_to_use_var/var.sh
var.sh
9,$# 获取参数的个数
ghostwu@dev:~/linux/shell/how_to_use_var$ cat var.sh
#!/bin/bash
echo $#
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var.sh {a..j}
10,判断参数的个数,给出一些提示信息
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var2.sh a
usage:/bin/bash var2.sh arg1 arg2
ghostwu@dev:~/linux/shell/how_to_use_var$ bash var2.sh a b
a b
ghostwu@dev:~/linux/shell/how_to_use_var$ cat var2.sh
#!/bin/bash
if [ $# -ne ]
then
echo "usage:/bin/bash $0 arg1 arg2"
exit
fi
echo $ $
11,set -- 设置位置参数,跟命令行传参差不多
ghostwu@dev:~$ set -- hello ghost wu
ghostwu@dev:~$ echo $# ghostwu@dev:~$ echo $
hello
ghostwu@dev:~$ echo $
ghost
ghostwu@dev:~$ echo $
wu
12,$@, $*,不加引号时,输出所有参数
ghostwu@dev:~$ set -- hello ghost wu
ghostwu@dev:~$ echo $# ghostwu@dev:~$ echo $
hello
ghostwu@dev:~$ echo $
ghost
ghostwu@dev:~$ echo $
wu
ghostwu@dev:~$ echo $*
hello ghost wu
ghostwu@dev:~$ echo $@
hello ghost wu
ghostwu@dev:~$ for i in $*; do echo $i; done
hello
ghost
wu
ghostwu@dev:~$ for i in $@; do echo $i; done
hello
ghost
wu
加双引号时,在循环遍历的情况下:"$*" 所有参数当做一个参数。 "$@"输出所有参数
ghostwu@dev:~$ echo "$*"
hello ghost wu
ghostwu@dev:~$ echo "$@"
hello ghost wu
ghostwu@dev:~$ for i in "$*"; do echo $i; done
hello ghost wu
ghostwu@dev:~$ for i in "$@"; do echo $i; done
hello
ghost
wu
下面的例子,相当于加引号的 "$@"
ghostwu@dev:~$ for i;do echo $i; done
hello
ghost
wu
shift:将位置参数左移
ghostwu@dev:~$ echo $# $ $ $
hello ghost wu
ghostwu@dev:~$ shift
ghostwu@dev:~$ echo $# $ $ $
ghost wu
13,$? 获取上一条命令的执行状态返回值( 0 为成功,非0为失败 )
ghostwu@dev:~$ pwd
/home/ghostwu
ghostwu@dev:~$ echo $? ghostwu@dev:~$ cd /root
bash: cd: /root: Permission denied
ghostwu@dev:~$ echo $?
linux shell脚本之-变量极速入门与进阶(1)的更多相关文章
- linux shell脚本之-变量极速入门与进阶(2)
1,$$:显示当前的进程id号 ghostwu@dev:~/linux/shell/how_to_use_var$ cat show_pid.sh #!/bin/bash echo $$ ghostw ...
- Linux shell 脚本中变量的数学计算【转】
本文转载自:http://blog.csdn.net/qinghezhen/article/details/9194287 首先从一个例子说起: x=1+1 echo $x 你是不是期待着输出2啊?让 ...
- Linux Shell脚本入门--cut命令
Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...
- linux shell 脚本攻略学习20--awk命令入门详解
awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...
- Linux Shell 脚本入门
linux shell 脚本格式 #!/bin/sh#..... (注释)命令...命令... 使用vi 创建完成之后需设置权限 chmod +x filename.sh 执行命令: ./filena ...
- Linux Shell脚本入门--wget 命令用法详解
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
- Linux shell 脚本攻略之正则表达式入门
摘自:<Linux shell 脚本攻略> 下面是类似的解释:
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Linux Shell编程、变量、控制语句
为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...
随机推荐
- 32 bit 与 64 bit 程序(2)比较
32 bit 与 64 bit 程序(2)区别 由于操作系统内存分配的不同,导致软件开发过程中,需要编译不同版本的软件. 几个重要概念: (1)这里所说的的32位与64位程序,是指经过编译器编译后 ...
- .NET MVC 学习笔记(一)— 新建MVC工程
一..NET MVC 学习笔记(一)—— 新建MVC工程 接触MVC有段时间了,一直想找机会整理一下,可是限于文笔太差,所以一直迟迟羞于下手,想到最近做过的MVC项目也有一些了,花点时间整理一下方便以 ...
- rabbitmq基础学习+springboot结合rabbitmq实现回调确认confirm
rabbitmq集群docker快速搭建 https://blog.csdn.net/u011058700/article/details/78708767 rabbitmq原理博客 https:// ...
- 开源性能测试工具Locust使用篇(一)
1. 环境准备 安装python3.6 ,安装步骤略 pip install locust 安装完成后使用locust -V检查 2.locust使用,先编辑一个简单的load_test.py的脚本 ...
- OpenStack-Ocata版+CentOS7.6 云平台环境搭建 —7.网络服务Neutron配置
网络服务Neutron本章节结束如何安装并配置网络服务(neutron)采用:ref:`provider networks <network1>`或:ref:`self-service n ...
- Python - 集成开发环境Pycharm的使用方法和技巧
PyCharm HomePage:PyCharm 我的Pycharm,我做主 Getting Started with PyCharm Pycharm使用技巧 Documentation & ...
- PHP使用Zend Opcache之优化加速和缓存清理总结
简介 字节码缓存不是php的新特性,有很多独立性的扩展可以实现缓存,比如PHP Cache(APC),eAccelerator,ionCube和XCache等等.但是到目前为止,这些独立的扩展并没有集 ...
- docker容器中Postgresql 数据库备份
查看运行的容器: docker ps 进入目标容器: docker exec -u root -it 容器名 /bin/bash docker 中,以root用户,创建备份目录,直接执行如下命令, p ...
- Eclipse开发环境debug模式调试断点从jar跳到源码
Eclipse开发环境debug模式调试断点从jar跳到源码 说明:本案例使用jsch-0.1.54.jar和源码做test,项目分成两个,一个是jsch的源码,另一个是测试案例 一.下载JSch.的 ...
- 浅谈如何使用Netty开发高性能的RPC服务器
如何使用Netty进行RPC服务器的开发,技术原理涉及如下:1.定义RPC请求消息.应答消息结构,里面要包括RPC的接口定义模块,如远程调用的类名.方法名.参数结构.参数值等信息. 2.服务端初始化的 ...