2023年11月27日发(作者:)
linux下的shell脚本(基本语法)
linux下的shell脚本(基本)
Shell是⼀种脚本语⾔,那么,就必须有解释器来执⾏这些脚本,常见的脚本解释器有:
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命
令⼀共有40个。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
另外还有:ash、 csh、 ksh等。
常见的编程语⾔分为两类:⼀个是编译型语⾔,如:c/c++/java等,它们远⾏前全部⼀起要经过编译器的编译。另⼀个解释型语⾔,执⾏时,需
要使⽤解释器⼀⾏⼀⾏地转换为代码,如:awk, perl, python与shell等。
Shell 经过了POSIX的标准化,所以它是可以在不同的linux系统上进⾏移植。
关于注释的问题: 在shell中使⽤#进⾏注释,注意,sh⾥⾯没有多⾏注释,只能每⼀⾏加⼀个#号;
第⼀个shell脚本程序:
country="China"
echo $country echo ${country} echo "I love my ${country}abcd!"
#这个需要有{}的;
重定义变量: 直接把变量重新像开始定义的那样⼦赋值就可以了:
country="China" country="ribenguizi"
image
@ 的区别为: @ 都表⽰传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"2" … "
*" 会将所有的参数作为⼀个整体,以"2 …
@" 会将各个参数分开,以"2" … "$n" 的形式输出所有参数。
$? 可以获取上⼀个命令的退出状态。所谓退出状态,就是上⼀个命令执⾏后的返回结果。退出状态是⼀个数字,⼀般情
况下,⼤部分命令执⾏成功会返回 0,失败返回 1。
Shell中的替换
转义符:
在echo中可以⽤于的转义符有:
image
使⽤ echo 命令的 –E 选项禁⽌转义,默认也是不转义的; 使⽤ –n 选项可以禁⽌插⼊换⾏符;
使⽤ echo 命令的 –e 选项可以对转义字符进⾏替换。
另外,注意,经过我的实验,得到:
echo "" #得到 echo -e "" #得到 echo "" #得到 echo -e "" #得到
命令替换:
它的意思就是说我们把⼀个命令的输出赋值给⼀个变量,⽅法为把命令⽤反引号(在Esc下⽅)引起来. ⽐如:
directory=`pwd` echo $directory
变量替换:
image
⽐如:
a=10 b=20
字符串运算符:
image
⽂件测试运算符:
单引号的限制:
1. 单引号⾥的任何字符都会原样输出,单引号字符串中的变量是⽆效的;
2. 单引号字串中不能出现单引号(对单引号使⽤转义符后也不⾏)。
双引号的优点:
1. 双引号⾥可以有变量
2. 双引号⾥可以出现转义字符
拼接字符串:
country="China"
echo "hello, $country" #也可以 echo "hello, "$country" "
获取字符串长度:
string="abcd"
echo ${#string} #输出 4
-s, ⽤于去掉指定的⽂件的后缀名;
basename /home/yin/ ->
basename -a /home/yin/ /home/zhai/ -> basename -s .txt /home/yin/ -> 1
basename /home/yin/ .txt -> 1
得到路径名(不带⽂件名)使⽤ dirname命令:
${array_name[index]}
读取数组的全部元素,⽤@或*
${array_name[*]}
${array_name[@]}
获取数组的信息:
取得数组元素的个数:
1 abc
单引号与双引号效果⼀样
printf '%d %sn' 1 "abc"
1 abc
没有引号也可以输出
printf %s abcdef
abcdef
格式只指定了⼀个参数,但多出的参数仍然会按照该格式输
a=10 b=20
if [ b ] then
echo "a is equal to b"
else
for 变量 in 列表 do command1
command2
...
commandN done
command ⼀般为条件表达式,如果返回值为 false,则继续执⾏循环体内的语句,否则跳出循环。
类似地, 在循环中使⽤ break 与continue 跳出循环。 另外,break 命令后⾯还可以跟⼀个整数,表⽰跳出第⼏层循
环。
Shell函数
Shell函数必须先定义后使⽤,定义如下,
function_name () {
Shell 也可以包含外部脚本,将外部脚本的内容合并到当前脚本。使⽤:
. filename


发布评论