linux简单命令与Shell脚本

摘要:
不要保存退出shell脚本BourneAgainShell1。运行脚本:作为可执行程序,您需要在第一行/bin/bashmyUrl=“http://www.w3cschool.cc readonlymyUrl删除变量。unset命令删除变量。unsetvariable_nameunset命令无法删除只读变量变量类型。本地变量:在脚本或命令中定义,仅在当前shell实例中有效。由其他shell启动的程序无法访问本地变量环境变量。所有程序(包括由shell启动的应用程序)都可以访问环境变量。有些程序需要环境变量来确保其正常运行。

说明
1、#表示root用户登录,$表示普通用户登录
2、|符号是管道符,用于把|前的输出作为后面命令的输入
3、>表示追加并覆盖的意思
4、>>两个大于符号,表示追加

命令
1、cd命令:切换目录
cd /home 进入/home目录
cd ../返回上一级目录
cd  ./当前目录
2、ls命令:产看文件及目录
ls  ./ 查看当前目录所有的文件和目录
ls  -a 查看所有的文件,包括隐藏文件,以.开头的文件
ls -l 查看某个文件或者目录的权限,它以显示数据的第一个字段为准,第一个字段由10个自负组成
[root@node1 ~]# ls -l monitor_log.sh
-rw-r--r-- 1 root root 91 May  7 20:21 monitor_log.sh
第一位表示文件类型,-表示文件,d表示目录;后面每三位为一组。
   第一组:2-4位表示文件所有者的权限,即用户user权限,简称u
   第二组:5-7位表示文件所有者所属组成员的权限,group权限,简称g
   第三组:8-10位表示所有者所属组之外的用户的权限,other权限,简称o
rwx权限可以用数字来表示,分别表示为r(4)、w(2)、x(1)
3、pwd命令:显示当前所在的目录
4、mkdir:创建目录
mkdir  test ,命令后接目录的名称
5、rmdir:删除空目录
6、rm:删除文件或目录
rm –rf  test.txt (-r表示递归,-f表示强制)
7、cp:拷贝文件
cp  old.txt  /tmp/new.txt
如果拷贝目录需要加 –r参数
8、mv:重命名或移动文件或目录
mv old.txt new.txt
9、touch:创建文件
touch test.txt 如果文件存在,则表示修改当前文件时间
10、Useradd:创建用户
useradd jpc,userdel删除用户
11、Groupadd:创建组
groupadd jpc1,groupdel删除组
12、find:查找文件或目录
find /home -name "test.txt"
find 后接查找的目录,-name指定需要查找的文件名称,名称可以使用*表示所有
find  /home  -name  “*.txt” ;查找/home目录下,所有以.txt结尾的文件或者目录
13、cat:查看文件内容
cat test.txt 可以看到test.txt内容
14、more:查看文件内容
分页查看,cat是全部查看,如果篇幅较多只能看到最后的篇幅
可以配合cat使用:
cat test.txt|more 分页显示text内容
15、echo:回显
echo ok 显示ok,输出什么打印什么
echo  ok  > test.txt 把ok字符覆盖test.txt的内容,>表示追加并覆盖的意思
echo ok >> test.txt 表示向test.txt文件追加OK字符,不覆盖原文件里的内容
16、chown 改变某个文件的所有者或者所属的组
chown -R test:test monitor_log.sh

vi操作
命令行模式:vi默认打开就是命令行模式
文本输入模式:命令行模式下按i进入文本输入模式,按esc进入命令模式,
末行模式:命令行模式按:进入末行模式
:wq表示保存退出
:q!不保存退出



Shell脚本
Bourne Again Shell(/bin/bash)
1、运行脚本:
作为可执行程序
需要在第一行指定解释器 #!/bin/bash
将代码保存到test.sh
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
作为解释器参数
/bin/sh test.sh
/bin/php test.php
2、Shell变量
(1)定义变量时,变量名布甲美元符号($,php语言中变量需要)
you_name="jpc"
变量名和等号之间不能有空格
首字符必须字母
中间不能有空格,可以下划线
不能使用符号
不能使用bash里的关键字(可用help命令查看保留关键字)
(2)使用变量,只用在变量名前加美元符号即可
you_name="jpc"
echo $you_name
echo ${you_name}
花括号可不写,为了帮助解释器识别变量的边界
(3)只读变量,使用readonly命令讲变量定义为只读变量
#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
(4)删除变量,使用unset命令删除变量
unset variable_name
unset命令不能删除只读变量
(5)变量类型
局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要时,shell脚本也可以定义环境变量
shell变量:shell变量是由shell程序设置的特殊变量,shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
(6)Shell字符串
可用单引号,双引号,也可以不用引号
单引号:
单引号里的任何字符都会原样输出,单引号字符中的变量是无效的
单引号字符串中布恩那个出现单引号(对单引号使用转义字符后也不行)
双引号:
双引号里可以有变量
双引号里可以出现转义字符
拼接字符串
you_name="jpc"
greeting="hello,"$you_name"!"
greeting_1="hello,${you_name}!"
echo $greeting $greeting_1
获取字符串长度
string="abcd"
echo ${#string} #输出4
提取字符串
string="runoob is a great site"
echo ${string:1:4} # 输出unoo
从第二个字符开始截取四个字符
查找子字符串
查找字符“i或s”的位置
string="runoob is a great company"
echo `expr index "$string" is` #输出8
`是反引号(英文输入法左上角)
(7)Shell数组
bash仅支持一维数组,没限定数组的大小
定义数组
括号表示数组,数组元素用空格隔开
数组名=(值1 值2 值3 ... 值n)
也可单独定义数组的各分量
可以不使用连续的下标,而且下标的范围没有限制
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取数组
#{数组名[下标]}
使用@符号可以获取数组中的所有元素
#{数组名[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法想通
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
(8)Shell注释
以“#”开头的行就是注释,会被解释器忽略
sh里无多行注释
3、Shell传递参数
可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为$n n表示一个数字,1为执行脚本的第一个参数,2第二
$0为执行的文件名
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
如"$*"用"括起来的情况,以"$1 $2"形式输出所有参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数
如"$@"用"括起来的情况,以"$1" "$2"形式输出所有参数
$- 显示Shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态,0表示没有错误,其他任何值都表明有错误
4、Shell运算符
算数运算符、关系运算符、布尔运算符、字符串运算符、文件测试运算符
原生bash不支持简单的数学运算,通过expr来实现
两个数相加
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为:$val"
注意:
表达式和运算符之间要有空格
完整的表达式要被``包含,反引号
算术运算符
其他类似上述加法,用反引号包含
条件表达式要放在方括号之间,并且要有空格
例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字
-eq 检测两个数是否相等,相等返回true
-ne 检测两个数是否相等,不相等返回true
-gt 检测左边的数是否大于右边的
-lt 检测左边的数是否小于右边的
-ge 检测左边的数是否大于等于右边的
-le 检测左边的数是否小于等于右边的
布尔运算符
!非运算,表达式为true返回false
-o 或运算,有一个表达式为true返回true
-a 与运算,两个表达式都为true返回true
逻辑运算符
假定变量 a 为 10,变量 b 为 20:
&& 逻辑的AND
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的OR
[[ $a -lt 100 || $b -gt 100 ]] 返回 true
字符串运算符
= 检测两个字符串是否相等
!= 检测两个字符串是否不相等
-z 检测字符串长度是否为0
-n 检测字符串长度是否不为0
str 检测字符串是否为空
if [ $a ]
then
  echo "$a : 字符串不为空"
文件测试运算符
-b file 检测文件是否是块设备文件
-c file 检测文件是否是字符设备文件
-d file 检测文件是否是目录
-f file 检测文件是否是普通文件(既不是目录也不是设备文件),
-g file 检测文件是否设置了SGID位
-k file 检测文件是否设置了粘着位(Sticky Bit)
-p file 检测文件是否是有名管道
-u file 检测文件是否设置了SUID位
-r file 检测文件是否可读
-w file 检测文件是否可写
-x file 检测文件是否可执行
-s file 检测文件是否为空(文件大小是否大于0)
-e file 检测文件(包含目录)是否存在
5、Shell echo命令
显示普通字符串
echo "It is a test"
显示转义字符
echo ""It is a test""
显示变量
echo "$name It is a test"
显示换行
echo -e "OK! " # -e 开启转义
显示不换行
echo -e "OK! c"
显示结果定向至文件
echo "It is a test" > myfile
原样输出字符串,不进行转义或取变量(用单引号)
echo '$name"' 输出 $name"
显示命令执行结果
echo `date`
6、Shell printf命令
printf format-string [arguments...]
printf "%-10s %-8s %-4.2f " 郭靖 男 55.1234
郭靖 男 55.12
%s %c %d %f都是格式替代符
%-10s指一个宽度为10的字符(-表示左对齐,没有则表示右对齐))
不足补空格,超过会全部显示
%-4.2f 格式化为小数,.2指保留两位小数
printf转义序列
a 警告字符,通常为ASCII的BEl字符
后退
c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效)而且,任何在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符都被忽略

免责声明:文章转载自《linux简单命令与Shell脚本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WCF服务最近经常死掉Identity Server 4 中文文档(v1.0.0)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux文件系统应用---系统数据备份和迁移(用户角度)

1前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的 “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决。 之前的文章对Linux的文件系统有过粗略的介绍,但是了解文件系统结构后,有什么用途呢?在本章节将围绕"基于用户角度的Linux下的数据备份和迁移"的场景,对Linux文件系统相关知识进行实地...

Jenkins操作手册 巨详细,一篇足矣!

一、持续集成相关概念 1.1、什么是持续集成? 随着软件开发复杂度的不断提高,团队开发成员间如何更好的协同工作以确保软件开发的质量已经成为开发过程中不可回避的问题。尤其是近年来敏捷开发在软件领域越来越火,如何能在不间断变化的需求中快速适应和保证软件的质量显得尤其重要。持续集成正是针对这一问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至...

JavaScript中DOM操作文档对象模型获取标签内容

DOM操作文档对象模型获取标签内容一、通过id属性值获取标签对象(只能获取一个标签对象) document.getElementById('id属性值') //获取标签页中id为div1的标签对象 var oDiv1 = document.getElementById('div1'); //输出为id为id为div1的标签内容 console.log(oD...

Linux下pppoe设置

在Linux下配置pppoe,一般有以下步骤: 1. 安装pppoe软件。这个不多说,ape-get install pppoe即可。 2. 设置拨号属性: [cpp] view plain copy root@ubuntu:~# pppoe-setup     详细过程如下:      用户名: [cpp] view plain copy U...

解决linux重启后无法开启nginx问题“var/run/nginx/nginx.pid" no such file or directory问题

起因:每次重启虚拟机后,var/run/nginx/目录都会被删除,所以无法在这个目录创建nginx.pid文件,   可以自己创建var/run/nginx/目录,然后可以运行,但治标不治本,下次虚拟机重启目录还会丢失。 解决方法:   打开/usr/local/nginx/conf/nginx.conf 这是我的配置文件,一般在nginx的conf文件...

adb(15)-刷机相关命令

重启到 Recovery 模式 命令: adb reboot recovery 从 Recovery 重启到 Android 命令: adb reboot 重启到 Fastboot 模式 命令: adb reboot bootloader 通过 sideload 更新系统 如果我们下载了 Android 设备对应的系统更新包到电脑上,那么也可以通过...