Shell学习(一)


title: shell学习(一)
time: 2018.3.1 星期五 16:11


变量

  1. 变量与变量的内容以 '=' 来连接。
  2. 等号两边都不能直接接空格。
  3. 变量命名要求 ,不能以数字开头,由数字和英文字母组成。
  4. 有空格符可以以单引号或者双引号将变量内容结合起来。
    • 双引号内的特殊字符如 $ 可以保持原来的1意思。
    • 单引号内的特殊字符则仅为一般字符(纯文本)。
  5. 可用转义字符 ’\‘ 将特殊符号转义为1一般字符.
  6. 在一串命令中需要通过其他命令提供的信息。可使用反单引号或者$ ;反单引号为键盘上方的数字键盘1左边的按键。
  7. 若变量为了增加变量的内容。可使用 ‘$变量名称’ 或者 ’${变量名称}‘累加内容,以:作为后缀。
  8. export 使变量成为环境变量。
  9. unset 取消设置环境变量A

查看自己的系统支持哪些shell

    /etc/shell

传递参数

  • $0 执行的文件名字
  • 向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示当前shell使用的当前选项
$? 显示最后命令的退出状态 0 表示没有任何错误。其他任何值表明有错误。

@ 不同:前者 “1,2,3” 后者 “1”,“2”,“3”

数组

  • 定义
array_name={value0,value1...}
  • 引用
${array_name[index]}
  • 数组长度
${#array_name[*]}
${#array_name[@]}

基本运算符

算术运算符

  • expr 使用反引号 不是单引号
 val=`expr 2 + 2`   #两个数相加 + 号左右要有空格
  • 算术运算符
    • , -, * , / ,%, = , ==, !==
      乘号 * 需要 反斜号 \ 转义
  • == 与 !=
$a == $b

$a != $b

关系运算符

  • 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
运算符 说明
-eq 两个数是否相等
-ne 两个数是否不相等
-gt 检测左边的数是否大于右边的
- lt 检测左边的数是否小于右边的
-ge 检测左边的数是否大于等于右边的
-le 检测左边的数是否小于等于右边的
 $a -eq $b

布尔运算符

运算符 说明
! 非运算
-o 或运算
-a 与运算

逻辑运算符

运算符 说明
&& 逻辑的AND
|| 逻辑的OR

字符串运算符

运算符 说明
= 两个字符串是否相等
!= 两个字符串是否不相等
-z 检测字符串是否长度为0 为0 返回 true
-n 检测字符串是否长度为0 不为0 返回 true
$ 检测字符串是否为空 不为空返回true

文件测试运算符

操作符 说明
-b file 检测文件是否是块设备文件 是返回true
-c file 检测文件是否为字符设备文件 是返回true
-d file 检测文件是否是目录 是返回true
-f file 检测文件是否为普通文件(不是目录 也不是设备文件)是 返回 true
-g file 检测文件是否设置了 SGID位 是返回true
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p file 检测文件是否是有名管道,如果是,则返回 true。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。
-r file 文件是否可读
-w file 文件是否可写
-x file 文件是否可执行
-s file 文件是否为空
-e file 检测文件(目录)是否存在 是返回true

echo

#显示换行
echo -e "hello \n"

#显示不换行
echo -e "hello \c"  #-e 开启转义 \c 不换行

#显示结果定向至文件
echo "hello" > file

#原样输出字符串 不进行转义或取变量 用单引号
echo ' string'

#显示命令执行结果 用反引号
echo `date`

printf

  • 格式
printf format-string [arguments.....]
  • 类比c语言printf 多一个 - 指定对齐方式
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
- 表示左对齐 没有则右对齐
printf "%d %s\n" 1 "abc"
# 单引号和双引号一样
# 没有引号也可以输出

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

test 命令

if test $a 

流程控制

  • if else
if condition
then
         command1
elseif condition2
then 
        command2
else
         command3
fi
  • for 循环
for var in item1,item2...itemN
do 
     command1
    command1
done
  • while
while condition
do
      command
done

-until 循环 直到条件为true为止

until  condition
do
    command
done

-case 多选择语句

case 值 in
模式一)
         command1
          ;;
模式二)
          command2
           ;;
*)
           command3
            ;;
esac

-break
允许跳出所有循环

  • continue
    跳出当前循环

shell函数

[ function ] funname [()]

{

    action;

    [return int;]

}
  • 在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 1表示第一个参数,$2表示第二个参数...
  • 调用 funName 1 2 3

shell 输入/输出重定向

命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。

n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

  • 需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
  • here Document
command << delimiter
    document
delimiter

shell 文件包含

 使用 . 号来引用test1.sh 文件
 ./test1.sh

你可能感兴趣的:(Shell学习(一))