1.1 Shell介绍
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
1.2我的第一个Shell脚本
echo "hello world"
hello world
脚本运行方式:sh 脚本名称.sh 或者 ./脚本名称.sh
这里讲解下chmod权限问题
chmod 设置权限
- u 文件的拥有者
- g 文件的拥有者组
- o 其它用户
- a 所有用户
权限操作
- +添加权限
- -删除权限
- =设置权限
给文件的拥有者添加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