热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

简图记录shell的基本使用

简图记录学习。《shell脚本学习指南》&&《鸟哥linux私房菜学习建议》一、概念Shell概念:1、shell从使用角度,它是linux内核提供

简图记录学习。《shell脚本学习指南》&&《鸟哥linux私房菜学习建议》

一、概念

Shell概念:1、shell从使用角度,它是linux内核提供用户的使用接口的程序,当你从命令行终端登登录linux,其实就已经打开了一个默认的shell,如bash;2、由于shell支持解析脚本工作,另一方面shell也被称作一门脚本语言(可被shell解析器识别),编译型语言如C++/C/Java需要编译后按字节执行效率高,脚本型语言 如python ruby由解释器转化处理 简单灵活;

shell版本:shell也有很多版本,如sh、csh、zsh、ksh,常见默认bash,可以通过cat /etc/passwd查看默认指定的shell;

root@ubuntu:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash

Shell语言优点:简单、可移植、易开发;

终端命令类型:在终端执行典型命令有四类,一种是shell的自建命令,一种是shell脚本定义的函数,一种是外部命令,一种是命令别名(通过alias设置,方便使用) 可以通过type cmd查看 命令类型;

root@ubuntu:~# type cd #自建命令
cd is a shell builtin
root@ubuntu:~# type ls #命令别名
ls is aliased to `ls --color=auto'
root@ubuntu:~# type find #外部命令
find is /usr/bin/find
root@ubuntu:~# function test_func () {
> echo "hello test"
> }
root@ubuntu:~# test_func
hello test
root@ubuntu:~# type test_func #脚本函数
test_func is a function
test_func ()
{ echo "hello test"
}

命令的帮助和补全:可以用history查看历史命令,用tab键进行命令补全,用alias设置命令别名,用help查看自建命令帮助,用man查看命令手册;

二、典型自建命令

输入输出:输出printf; 输出echo; 读取read;

目录相关:打印当前目录pwd;切换目录 cd;

执行命令:exec

辅助命令:别名设置alias;命令记录history;命令类型识别 type;

测序命令: test 或者 [ ... ] (如测试文件属性,比较数字,比较子串等)

三、shell基本语法

1、变量
变量不需要先声明定义再使用,可以直接设置值使(同时声明定义),按字符串保存,如果数字计算或者比较需要命令配合;linux有设置一系列内置变量:如$# 入参个数,$@全部入参,$1第一个入参(其他类似),$0脚本名;
1)、设置变量内容 var_name=xxx;追加变量内容 var_name+=xxx;
2)、查看内容 echo $var_name 或者 echo ${var_name}打印;set 命令查看所有变量;env查看全部环境变量;
${var_name:=xxx}若不存在就定义值为xxx;${var_name?=xxx} 若不存在返回xxx;${var_name+=xxx}若存在返回xxx否则空
3)、删除已定义变量unset var_name;
4)、父进程往子进程传递变量列表 export xxx

goodboy@ubuntu:~$ var=1234 #注意不能添加空格
goodboy@ubuntu:~$ echo $var
1234
goodboy@ubuntu:~$ var+=5678
goodboy@ubuntu:~$ echo $var
12345678
goodboy@ubuntu:~$ echo "we have get var $var"
we have get var 12345678
goodboy@ubuntu:~$ echo "we have get var ${var}"
we have get var 12345678
goodboy@ubuntu:~$ echo "$var length is ${#var}"
12345678 length is 8

2、表达式

1)、算数比较:条件通常被放置在封闭的中括号内。一定要注意在[或]与操作数之间有一个空格。
[ $var -eq 0 ] 表示 当 $var 等于 0 时为真。算术条件判断:-eq等于/-gt大于/ -lt小于 / -ge大于或等于 / -le小于或等于 /
 可以按照下面的方法结合多个条件进行测试:
[ $var1 -ne 0 -a $var2 -gt 2 ] #使用逻辑与-a 
[ $var1 -ne 0 -o $var2 -gt 2 ] #逻辑或
2)、文件系统相关测试:我们可以使用不同的条件标志测试不同的文件系统相关的属性

[ -f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。
[ -x $var ]:如果给定的变量包含的文件可执行,则返回真。
[ -d $var ]:如果给定的变量包含的是目录,则返回真。
[ -e $var ]:如果给定的变量包含的文件存在,则返回真。
[ -c $var ]:如果给定的变量包含的是一个字符设备文件的路径,则返回真。
[ -b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真。
[ -w $var ]:如果给定的变量包含的文件可写,则返回真。
[ -r $var ]:如果给定的变量包含的文件可读,则返回真。
[ -L $var ]:如果给定的变量包含的是一个符号链接,则返回真。

3)、字符串比较:使用字符串比较时,最好用双中括号,时候采用单个中括号会产生错误。

[[ $str1 = $str2 ]]:当str1等于str2,文本是一模一样,返回真。
[[ $str1 == $str2 ]]:这是检查字符串是否相等的另一种写法。
[[ $str1 != $str2 ]]:如果str1和str2不相同,则返回真。
[[ $str1 > $str2 ]]:如果str1的字母序比str2大,则返回真。
[[ $str1 <$str2 ]]&#xff1a;如果str1的字母序比str2小&#xff0c;则返回真。
[[ -z $str1 ]]&#xff1a;如果str1包含的是空字符串&#xff0c;则返回真。
[[ -n $str1 ]]&#xff1a;如果str1包含的是非空字符串&#xff0c;则返回真。

4&#xff09;、逻辑运算&#xff1a;使用逻辑运算符 && 和 || 能够很容易地将多个条件组合起来

if [[ -n $str1 ]] && [[ -z $str2 ]] ; 
then commands; 
fi

3、语句

条件语句&#xff1a;我们可以用if、if else以及逻辑运算符进行测试&#xff0c;用比较运算符来比较数据项

if condition; 
then commands; 
else if condition; then commands; 
else commands; 
fi

循环语句&#xff1a;while循环命令和if类似

while condition;
docommand;
done;

4、函数

定义&#xff1a;使用function关键字进行定义&#xff0c;return指定返回值&#xff0c;不写表示没有返回值&#xff1b;

function test_func () {echo "hello test"return 0
}

调用&#xff1a;使用function_name 入参1 入参2 ... 方式调用

5、注释

使用#注释该行

6、脚本文件

shell脚本第一行需要指定解析器如&#xff1a; #&#xff01;/bin/sh

然后会从上到下查找cmd进行顺序执行&#xff0c;如果是定义函数的语句会忽略&#xff1b;

四、外部命令介绍

shell调用外部命令&#xff0c;相当于创建进程进行执行&#xff0c;如grep、awk、find等&#xff1b;基础命令可以参考&#xff1a;

https://blog.csdn.net/runafterhit/article/details/52864938

 

即你的操作都是通过shel完成&#xff0c;你也可以写脚本帮助自己提升管理和使用效率。如果你要使用linux&#xff0c;那么你需要学习它


推荐阅读
author-avatar
lan1998_789
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有