shell速查

  • 内容
  • 评论
  • 相关

shell速查

指定解释器

例如

#!/bin/bash

还可以指定php

#!/usr/bin/php

常见的shell解释器有

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

也在运行时指定: /bin/sh test.sh

shell 变量

#!/bin/bash

#定义变量
name="cat"
age=10;

#通过美元符号使用变量
echo "hello ${name},age:${age}"

#readonly 定义只读变量
readonly readonly_var="dog"
#这时再赋值是错误的
readonly_var="cat"

#unset 删除变量,但是不能删除只读变量,unset 后再使用为空
unset name
echo "name:${name}"

字符串

#!/bin/bash

#定义字符串
str1="str1"
str2='str2'
str3="${str1},${str2}"
echo str3

#输出字符串长度
echo "${#str3}"

#截取字符串
num="0123456789"
echo ${num:1:7}

数组

#!/bin/bash
#定义数组
arr=("0" "1" "2" "3" "4")
#还可以指定索引赋值
arr[5]="5"
#读取数组
echo ${arr[5]}

#获取所有元素
echo ${arr[@]}
echo ${arr[*]}

#获取数组长度
echo ${#arr[*]}

传递参数

#!/bin/bash

#传递参数

echo "第一个参数为${0},第二个参数为${1}"
#此时执行 ./t.sh lala 输入 第一个参数为./t.sh,第二个参数为lala

echo "当前有${#}个参数${*},当前的pid ${$}"
参数 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。如""""1 2n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 使"@"用「"」括起来的情况、以"1""2" … "$n" 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

输入输出

#!/bin/bash

#输入输入

echo "标准输入"

#输入
read name

#开启转义
echo -e "\a\abbbbb\r"

#输出到文件
echo `ls` >> myfile

格式输出

#!/bin/bash

#输入输入

printf "%-20s\t%-10s\t%-10s\n" 姓名 性别 体重
printf "%-20s\t%-10s\t%-10.2f\n" cat 男 50.555

printf "12345\r000"

流程控制

test

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
字符串测试
参数 说明
= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真
num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
文件测试参数 说明
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真
实例演示:
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
输出结果:
文件已存在!

条件判断

#!/bin/bash

if [[ condition ]]; then
#statements

elif [[ condition ]]; then
#statements
fi

例如

#!/bin/bash

name1="cat"
name2="cat"

if [[ name1 -eq name2 ]]; then
echo "eq"
fi

循环分支

#!/bin/bash

for (( i = 0; i < 10; i++ )); do
echo $i
done

for lsstr in `ls`; do
echo "======${lsstr}"
done





while [[ j -lt 10 ]]; do
let "j++"
echo $j
done

word="cat"
case $word in
"cat" )
echo "cat"
;;
"dog" )
echo "dog"
;;
esac

函数

#!/bin/bash

fun1()
{
echo "fun1..."
}

fun1

fun2()
{
echo "fun2..."
#return 值为0-255
return 10
}

fun2
echo $?

文件重定向

#!/bin/bash

#输出从定向
ls>outfile.txt
#输出从定向追加
ls>>outfile.txt

#输出重定向
$cmd<infile.txt
echo $cmd
#从文件输入

#错误重定向
las 2>errfile.txt
las 2>>errfile.txt

#将标准输入和标准输入全部重定向
ls>errfile.txt 2>&1
ls>>errfile.txt 2>&1

#Here Document
cat<<delimiter
lalala
delimiter


#输出到/dev/null
ls>/dev/null

文件包含

#!/bin/bash
. t.sh
#或
source t.sh

评论

0条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注