shell 一些基本h知识

变量
单引号,只能输出句子,不可以输出含有变量的东西
双引号可以 echo “my name is ${name}”
获取字符串长度 name=”zhangsan”
echo ${#name}
提取子字符串
::4 从第一个字符开始,往后截取四个字符
Name=“this is me”
Echo ${name ::4} 输出this
数组(bash只支持一维数组)
定义数组 array name=(li wang xiang zhang)
赋值数组元素 array name[0]=”zhao“
获取数组元素
array name[0]=”li”
echo ${array name[0]} 输出li
echo ${array name[@]} 输出所有数组元素
$#:参数个数
" *: 以一个单字符串显示所有向脚本传递的参数。如" *“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数
@ @:与 *相同,但是使用时加引号,并在引号中返回每个参数。
$$:脚本运行的当前进程号
$!:后台运行的最后一个进程的ID
$?: 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
————————————————
算数运算

      • \ : 乘号前必须加\进行转义才可以进行乘法运算
        运算 三种方法
        val=expr 2 + 2 (使用linux命令expr进行辅助运算)
        val= [ 2 + 2 ] 4 v a l = [2+2] (4个空格不是必要的,不同于条件判断) val= ((2+2))

数字关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下面假定变量 a 为 10,变量 b 为 20

-eq :检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne: 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt: 检测左边的数是否>右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt : 检测左边的数是否<右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge: 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le : 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

= :检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= :检测两个字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z :检测字符串长度是否为0,为0返回 true。 [ -z a ] f a l s e n 0 0 t r u e [ n a ] 返回 false。 -n :检测字符串长度是否为0,不为0返回 true。 [ -n “ a” ] 返回 true。
$ :检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。
布尔运算符
下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

! :非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o :或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a :与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

逻辑运算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:

&& :逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| :逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true

文件运算符

-b file :检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file :检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file :检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file :检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file :检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file :检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file :检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file :检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file :检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file :检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file :检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file :检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file :检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ]
————————————————
执行相关
命令替换
命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。
执行命令:

ls /etc : 反引号 (所有的unix系统都支持)
$(ls /etc) : $+() (部分unix系统不支持)
多个嵌套使用时,从内向外执行

例子:
for file in \s /etc\ 或 for file in $(ls /etc) 循环中使用
dirname $0 获取脚本文件所在的目录
path=$(cd dirname $0;pwd) : 获取脚本当前所在目录,并且执行cd命令到达该目录,使用pwd获取路径并赋值到path变量
————————————————

输出
echo
仅用于字符串的输出,没有使用printf作为输出的移植性好,建议使用printf
printf

printf 不会像 echo 自动添加换行符,我们可以手动添加 \n
无大括号,直接以空格分隔

格式:printf format-string [arguments…] 其中(format-string: 格式控制字符串、arguments: 参数列表)
案例:printf “%-10s %-8s %-4.2f\n” 郭靖 男 66.1234
%s %c %d %f 都是格式替代符

d:Decimal 十进制整数 对应位置参数必须是十进制整数,否则报错!
s:String 字符串 对应位置参数必须是字符串或者字符型 否则报错
c:Char 字符 对应位置参数必须是字符串或者字符型 否则报错
f:Float 浮点 对应位置参数必须是数字型 否则报错

%-10s : 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f :指格式化为小数,宽度为4个字符,其中.2指保留2位小数。
转义符:

\a :警告字符,通常为ASCII的BEL字符
\b :后退
\c :抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f :换页(formfeed)
\n :换行
\r :回车(Carriage return)
\t :水平制表符
\v :垂直制表符
\ :一个字面上的反斜杠字符
\ddd :表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd :表示1到3位的八进制值字符
————————————————

流程控制:

输入输出重定向
一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。
如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
输入重定向

bash.sh < file : 将脚本的输入重定向到file,由file提供参数

输出重定向

bash.sh > file : 将脚本的输出数据重定向到file中,覆盖数据
bash.sh >> file : 将脚本的输出数据重定向到file中,追加数据
command >> file 2>&1 : 将 stdout 和 stderr 合并后重定向到 file
————————————————
shell脚本调试
检查是否有语法错误-n:
bash -n script_name.sh
使用下面的命令来执行并调试 Shell 脚本-x:
bash -x script_name.sh
环境变量
环境变量默认就存在,常用的有下面这几个:

  1. HOME:用户主目录
  2. PATH:系统环境变量 PATH
  3. TERM:当前终端
  4. UID:当前用户 ID
  5. PWD:当前工作目录,绝对路径
发布了25 篇原创文章 · 获赞 2 · 访问量 1722

猜你喜欢

转载自blog.csdn.net/ytt999/article/details/103114278