超详细的Shell学习教程第一篇

1.1 Shell介绍

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

1.2我的第一个Shell脚本

echo "hello world"  

hello world

脚本运行方式:sh  脚本名称.sh  或者 ./脚本名称.sh

这里讲解下chmod权限问题

chmod 设置权限

  1.     u 文件的拥有者
  2.     g 文件的拥有者组
  3.     o 其它用户
  4.     a 所有用户

 权限操作

  1.     +添加权限
  2.     -删除权限
  3.     =设置权限

给文件的拥有者添加r权限

chmod u+r test.txt  
chmod u=rwx test.txt
ll -d /var/www/html/ 查看文件权限
chmod +x ./test.sh 使脚本具备
如果某个文件只有读权限,使用chmod +x 提示不可更改
如:
修改/etc/profile时提示为只读文件,不允许修改,

敲#chmod 777 /etc/profile后仍不允许修改

解决办法:

在root权限下敲 #:mount -o remount,rw /

1.3Shell语法

$ a="hello world"
$ echo a
hello world

$ echo $a
hello world

$ echo echo $a" good"
hello world good

单引号和双引号
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
echo '$a hello'
$a hello

$ echo "$a hello"
hello world hello

$ echo ${a}
hello world

删除变量

root@ubuntu:/home/lulu/Desktop/Test# a="hello"
root@ubuntu:/home/lulu/Desktop/Test# echo $a
hello
root@ubuntu:/home/lulu/Desktop/Test# unset a
root@ubuntu:/home/lulu/Desktop/Test# echo $a

特殊符号的使用:

双引号用于括起来一段字符串值,支持$var形式的变量替换
单引号也表示其内容是字符串,不支持转义
\范斜线,某些情况下表示转义
$(ls) 表示执行ls的结果,与''类似,不过不可以嵌套
`反引号 用法比较特殊,代表命令的输出,非常有用
root@ubuntu:/home/lulu/Desktop/Test# echo `ls`
grep.txt OpenSed Psed sed Sed sed.txt students_store test
root@ubuntu:/home/lulu/Desktop/Test# a=`ls`
root@ubuntu:/home/lulu/Desktop/Test# $a

root@ubuntu:/home/lulu/Desktop/Test# array=(`ls`)
root@ubuntu:/home/lulu/Desktop/Test# echo $array

$() 对变量进行操作,比如相加$(a+b)或者$($a+$b)
$ echo $((2+3))
5$ echo $((2+3*4))
14




(())是整数扩展,把里面的变量当做整数去处理
({1,10})等价于seq 1 10,表示1到10

$ echo -e "aaa\nbbb"
aaa
bbb

$ seq 1 10
1
2
3
4
5
6
7
8
9
10

预定义变量:

$ echo $PWD
$ echo $HOME
$ echo $USER
$ echo $PATH
root@ubuntu:/home/lulu/Desktop/Test# echo $PWD
/home/lulu/Desktop/Test
root@ubuntu:/home/lulu/Desktop/Test# echo $HOME
/root
root@ubuntu:/home/lulu/Desktop/Test# echo $USER
root
root@ubuntu:/home/lulu/Desktop/Test# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

字符串操作:

提取子字符串:

$ a="hello world"
$ echo ${a:1:4}
ello


获取字符串长度:

$ a="hello world"

$echo ${#a}
11

查找子字符串:

查找字符o的位置,如果查找多个字符

$ a="hello world"

$ echo `expr index "$a" o`
5
$ echo `expr index "$a" ow`

拼接字符串:

root@ubuntu:/home/lulu/Desktop/Test# a="hello"
root@ubuntu:/home/lulu/Desktop/Test# b="world"
root@ubuntu:/home/lulu/Desktop/Test# echo $a $b
hello world

root@ubuntu:/home/lulu/Desktop/Test# c="$a $b"
root@ubuntu:/home/lulu/Desktop/Test# echo $c
hello world

使用单引号
root@ubuntu:/home/lulu/Desktop/Test# d='hello ,${b}'
root@ubuntu:/home/lulu/Desktop/Test# echo $d
hello ,${b}

双引号:
root@ubuntu:/home/lulu/Desktop/Test# d="hello ,${b}"
root@ubuntu:/home/lulu/Desktop/Test# echo $d
hello ,world


截取字符串:

去头
root@ubuntu:/home/lulu/Desktop/Test# s="hello from world"
root@ubuntu:/home/lulu/Desktop/Test# echo ${s}
hello from world
root@ubuntu:/home/lulu/Desktop/Test# echo "${s#hello}"
 from world
root@ubuntu:/home/lulu/Desktop/Test# echo ${s#hello}
from world
root@ubuntu:/home/lulu/Desktop/Test# echo ${s#*o}
from world
root@ubuntu:/home/lulu/Desktop/Test# echo ${s#**o}
root@ubuntu:/home/lulu/Desktop/Test# echo ${s##*o}
rld
root@ubuntu:/home/lulu/Desktop/Test# echo ${s##*ho}
hello from world

掐尾
root@ubuntu:/home/lulu/Desktop/Test# echo ${s%%f}
hello from world
root@ubuntu:/home/lulu/Desktop/Test# echo ${s%%f*}
hello

替换

root@ubuntu:/home/lulu/Desktop# s="hello from testerhome"
root@ubuntu:/home/lulu/Desktop# echo $s
hello from testerhome
root@ubuntu:/home/lulu/Desktop# echo ${s/testerhome/aaa}
hello from aaa
root@ubuntu:/home/lulu/Desktop# echo ${s/testerhome/home}
hello from home

数组讲解: 

数组变量:
array=(1,2,3,4,5)

输出数组元素
$ echo ${array[@]}
$ echo ${array[*]}
$ echo ${array}

获取数组大小长度

$ length=${#a[*]}

读取数组元素

${数组名[下标]}

$echo ${array_name[@]}

$ array[0]="hello"

$ array[1]="world"

$ array[2]="good"

$ echo ${#array[*]}
3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值