Linux925 shell 变量:本地、环境变量、全局变量;数组:普通数组、关联数组;交互定义、basename、dirname

问题

bash 复制代码
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""\$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh 213 23 213 2132
./1.sh: 第 1 行:read: `4': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ 
bash 复制代码
[caozx26@caozx26 ~]$ ./1.sh sd asd asd 
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ 
bash 复制代码
[caozx26@caozx26 ~]$ array[6]=(12 23121 213 123 "hello" [21]=ff)
bash: array[6]: 无法将链表赋值给数组成员
bash 复制代码
[caozx26@caozx26 ~]$ names_ar=([name1]=js [n2]=ts [n]=ok)
[caozx26@caozx26 ~]$ echo ${names_ar[*]}
ok
[caozx26@caozx26 ~]$ echo ${names_ar[@]}
ok
[caozx26@caozx26 ~]$ echo ${!names_ar[@]}
0
[caozx26@caozx26 ~]$ 

全局变量是变量吗 是系统变量吗

变量

环境变量、本地变量

bash 复制代码
[caozx26@caozx26 ~]$ A=hello\
> ^C
[caozx26@caozx26 ~]$ A=hello
[caozx26@caozx26 ~]$ echo $A
hello
[caozx26@caozx26 ~]$ export A
[caozx26@caozx26 ~]$ env|grep ^A
A=hello
[caozx26@caozx26 ~]$ B=22
[caozx26@caozx26 ~]$ ps
    PID TTY          TIME CMD
   3082 pts/0    00:00:00 bash
   3162 pts/0    00:00:00 ps
[caozx26@caozx26 ~]$ echo $B
22
[caozx26@caozx26 ~]$ /bin/bash
[caozx26@caozx26 ~]$ echo $B

[caozx26@caozx26 ~]$ exit
exit
[caozx26@caozx26 ~]$ echo $B
22
[caozx26@caozx26 ~]$ /bin/bash
[caozx26@caozx26 ~]$ echo $A
hello
[caozx26@caozx26 ~]$ echo $B

[caozx26@caozx26 ~]$ exit
exit
[caozx26@caozx26 ~]$ 

全局变量

bash 复制代码
[caozx26@caozx26 ~]$ cat /etc/profile
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}


if [ -x /usr/bin/id ]; then
    if [ -z "$EUID" ]; then
        # ksh workaround
        EUID=`/usr/bin/id -u`
        UID=`/usr/bin/id -ru`
    fi
    USER="`/usr/bin/id -un`"
    LOGNAME=$USER
    MAIL="/var/spool/mail/$USER"
fi

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
else
    pathmunge /usr/local/sbin after
    pathmunge /usr/sbin after
fi

HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
    export HISTCONTROL=ignoreboth
else
    export HISTCONTROL=ignoredups
fi

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then 
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done

unset i
unset -f pathmunge

if [ -n "${BASH_VERSION-}" ] ; then
        if [ -f /etc/bashrc ] ; then
                # Bash login shells run only /etc/profile
                # Bash non-login shells run only /etc/bashrc
                # Check for double sourcing is done in /etc/bashrc.
                . /etc/bashrc
       fi
fi
[caozx26@caozx26 ~]$ cat /etc/bashrc
# /etc/bashrc

# System wide functions and aliases
# Environment stuff goes in /etc/profile

# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

# Prevent doublesourcing
if [ -z "$BASHRCSOURCED" ]; then
  BASHRCSOURCED="Y"

  # are we an interactive shell?
  if [ "$PS1" ]; then
    if [ -z "$PROMPT_COMMAND" ]; then
      case $TERM in
      xterm*|vte*)
        if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
        elif [ "${VTE_VERSION:-0}" -ge 3405 ]; then
            PROMPT_COMMAND="__vte_prompt_command"
        else
            PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
        fi
        ;;
      screen*)
        if [ -e /etc/sysconfig/bash-prompt-screen ]; then
            PROMPT_COMMAND=/etc/sysconfig/bash-prompt-screen
        else
            PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
        fi
        ;;
      *)
        [ -e /etc/sysconfig/bash-prompt-default ] && PROMPT_COMMAND=/etc/sysconfig/bash-prompt-default
        ;;
      esac
    fi
    # Turn on parallel history
    shopt -s histappend
    history -a
    # Turn on checkwinsize
    shopt -s checkwinsize
    [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
    # You might want to have e.g. tty in prompt (e.g. more virtual machines)
    # and console windows
    # If you want to do so, just add e.g.
    # if [ "$PS1" ]; then
    #   PS1="[\u@\h:\l \W]\\$ "
    # fi
    # to your custom modification shell script in /etc/profile.d/ directory
  fi

  if ! shopt -q login_shell ; then # We're not a login shell
    # Need to redefine pathmunge, it gets undefined at the end of /etc/profile
    pathmunge () {
        case ":${PATH}:" in
            *:"$1":*)
                ;;
            *)
                if [ "$2" = "after" ] ; then
                    PATH=$PATH:$1
                else
                    PATH=$1:$PATH
                fi
        esac
    }

    # By default, we want umask to get set. This sets it for non-login shell.
    # Current threshold for system reserved uid/gids is 200
    # You could check uidgid reservation validity in
    # /usr/share/doc/setup-*/uidgid file
    if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
       umask 002
    else
       umask 022
    fi

    SHELL=/bin/bash
    # Only display echos from profile.d scripts if we are no login shell
    # and interactive - otherwise just process them to set envvars
    for i in /etc/profile.d/*.sh; do
        if [ -r "$i" ]; then
            if [ "$PS1" ]; then
                . "$i"
            else
                . "$i" >/dev/null
            fi
        fi
    done

    unset i
    unset -f pathmunge
  fi

fi
# vim:ts=4:sw=4

内置变量

? $ !!! !!!

bash 复制代码
[caozx26@caozx26 ~]$ /bin/bash
[caozx26@caozx26 ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面
[caozx26@caozx26 ~]$ echo $?
0
[caozx26@caozx26 ~]$ $$
bash: 3518: 未找到命令...
[caozx26@caozx26 ~]$ echo $$
3518
[caozx26@caozx26 ~]$ ps
    PID TTY          TIME CMD
   3478 pts/0    00:00:00 bash
   3518 pts/0    00:00:00 bash
   3586 pts/0    00:00:00 ps
[caozx26@caozx26 ~]$ kill -9 $$
已杀死
[caozx26@caozx26 ~]$ $!
[caozx26@caozx26 ~]$ sleep 200&
[1] 3615
[caozx26@caozx26 ~]$ echo $!
3615
[caozx26@caozx26 ~]$ ps
    PID TTY          TIME CMD
   3478 pts/0    00:00:00 bash
   3615 pts/0    00:00:00 sleep
   3628 pts/0    00:00:00 ps
[caozx26@caozx26 ~]$ ls -l
总用量 0
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 公共
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 模板
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 视频
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 图片
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 文档
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 下载
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 音乐
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 桌面
[caozx26@caozx26 ~]$ echo !$
echo -l
-l
[caozx26@caozx26 ~]$ !!
echo -l
-l
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""$# is:"" $#
echo "ok"
[caozx26@caozx26 ~]$ chmod +x 1.sh

\* @ $#

bash 复制代码
[caozx26@caozx26 ~]$ ./1.sh asd sad dd das sadd as
6
asd sad dd das sadd as
asd sad dd das sadd as
ok
[caozx26@caozx26 ~]$ 

0 1 2 3

bash 复制代码
[caozx26@caozx26 ~]$ chmod +x 2.sh
[caozx26@caozx26 ~]$ ./2.sh sad dsad sda dasd
./2.sh
sad
dsad
sda
[caozx26@caozx26 ~]$ 

定义规则

bash 复制代码
[caozx26@caozx26 ~]$ ?a=s
bash: ?a=s: 未找到命令...
[caozx26@caozx26 ~]$ "?a"=s
bash: ?a=s: 未找到命令...
[caozx26@caozx26 ~]$ "213a"=dsa
bash: 213a=dsa: 未找到命令...
[caozx26@caozx26 ~]$ D=" abc"
[caozx26@caozx26 ~]$ D= AS
bash: AS: 未找到命令...
相似命令是: 'as'
[caozx26@caozx26 ~]$ DA= SD
bash: SD: 未找到命令...
[caozx26@caozx26 ~]$ DA=" SDD"
[caozx26@caozx26 ~]$ DA="?SA"
[caozx26@caozx26 ~]$ DA=?21
[caozx26@caozx26 ~]$ 
[caozx26@caozx26 ~]$ "123"=A
bash: 123=A: 未找到命令...
[caozx26@caozx26 ~]$ A=date
[caozx26@caozx26 ~]$ a=date
[caozx26@caozx26 ~]$ a=`date`
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:31:53 CST
[caozx26@caozx26 ~]$ a=date
[caozx26@caozx26 ~]$ echo $a
date
[caozx26@caozx26 ~]$ a=$(date)
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:32:09 CST
[caozx26@caozx26 ~]$ 

交互式定义

bash 复制代码
[caozx26@caozx26 ~]$ read -t 3 -p "input " name
input 213123[caozx26@caozx26 ~]$ echo $name

[caozx26@caozx26 ~]$ read -t -p "input:" name
bash: read: -p: 无效的超时声明
[caozx26@caozx26 ~]$ read -t 3 -p "input:" name
input:12321312
[caozx26@caozx26 ~]$ echo $name
12321312
[caozx26@caozx26 ~]$ echo -s -p "input:" pass
-s -p input: pass
[caozx26@caozx26 ~]$ echo -s -p "input:"  pass
-s -p input: pass
[caozx26@caozx26 ~]$ read -s -p "input:" pass
input:[caozx26@caozx26 ~]$ echo $pass
213
[caozx26@caozx26 ~]$ echo hell | A
bash: A: 未找到命令...
[caozx26@caozx26 ~]$ echo hell | read A
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:32:09 CST
[caozx26@caozx26 ~]$ echo $A
date
[caozx26@caozx26 ~]$ read A B
hello sss
[caozx26@caozx26 ~]$ echo $A
hello
[caozx26@caozx26 ~]$ echo $B
sss
[caozx26@caozx26 ~]$ vim 1.txt
[caozx26@caozx26 ~]$ cat 1.txt
ss 123

[caozx26@caozx26 ~]$ read user pass <1.txt
[caozx26@caozx26 ~]$ echo $user 
ss
[caozx26@caozx26 ~]$ echo $pass
123
[caozx26@caozx26 ~]$ vim 2.txt
[caozx26@caozx26 ~]$ read us pass<2.txt
[caozx26@caozx26 ~]$ echo $us
dasd,123
[caozx26@caozx26 ~]$ echo $pass

[caozx26@caozx26 ~]$ 

dirname basename

bash 复制代码
[caozx26@caozx26 ~]$ pwd
/home/caozx26
[caozx26@caozx26 ~]$ ls
1.sh  1.txt  2.sh  2.txt  公共  模板  视频  图片  文档  下载  音乐  桌面
[caozx26@caozx26 ~]$ c=/home/caozx26/1.sh
[caozx26@caozx26 ~]$ direname $c
bash: direname: 未找到命令...
[caozx26@caozx26 ~]$ dirname $c
/home/caozx26
[caozx26@caozx26 ~]$ basename $c
1.sh
[caozx26@caozx26 ~]$ 

数组

普通数组

一次赋值1个变量

bash 复制代码
[caozx26@caozx26 ~]$ array[0]=sa
[caozx26@caozx26 ~]$ array[1]=sd
[caozx26@caozx26 ~]$ echo $[array[*]]
bash: array[*]: 数组下标不正确
0
[caozx26@caozx26 ~]$ echo ${array[*]}
sa sd
[caozx26@caozx26 ~]$ echo ${array[1]}
sd

一次赋值多个变量

bash 复制代码
[caozx26@caozx26 ~]$ array1=(na,ma,da)
[caozx26@caozx26 ~]$ echo ${array1[0]}
na,ma,da
[caozx26@caozx26 ~]$ declare -r
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -ar BASH_VERSINFO=([0]="4" [1]="4" [2]="19" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
declare -ir EUID="1000"
declare -ir PPID="3473"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="1000"
[caozx26@caozx26 ~]$ echo ${array[*]:1:1}
sd
[caozx26@caozx26 ~]$ echo ${array1[*]:1:1}

[caozx26@caozx26 ~]$ echo ${array1[*]:0:1}
na,ma,da
[caozx26@caozx26 ~]$ array2=(ss ssa sdsad asd)
[caozx26@caozx26 ~]$ echo ${array2[*]:2:1}
sdsad
[caozx26@caozx26 ~]$ echo ${!array2[*]}
0 1 2 3
[caozx26@caozx26 ~]$ echo ${#array2[*]}
4
[caozx26@caozx26 ~]$ array4=(`ls -l`)
[caozx26@caozx26 ~]$ echo array4
array4
[caozx26@caozx26 ~]$ echo $array4
总用量
[caozx26@caozx26 ~]$ ls -l
总用量 8
-rwxrwxr-x. 1 caozx26 caozx26 34 9月  26 06:24 1.sh
-rwxrwxr-x. 1 caozx26 caozx26 32 9月  26 06:28 2.sh
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 公共
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 模板
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 视频
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 图片
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 文档
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 下载
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 音乐
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 桌面
[caozx26@caozx26 ~]$ echo ${array4[@]}
总用量 8 -rwxrwxr-x. 1 caozx26 caozx26 34 9月 26 06:24 1.sh -rwxrwxr-x. 1 caozx26 caozx26 32 9月 26 06:28 2.sh drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 公共 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 模板 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 视频 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 图片 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 文档 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 下载 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 音乐 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 桌面
[caozx26@caozx26 ~]$ echo ${array4[1]}
8
[caozx26@caozx26 ~]$ array[6]=(12 23121 213 123 "hello" [21]=ff)
bash: array[6]: 无法将链表赋值给数组成员
[caozx26@caozx26 ~]$ array6=(12 23121 213 123 "hello" [21]=ff)
[caozx26@caozx26 ~]$ echo $array6
12
[caozx26@caozx26 ~]$ echo ${array6[@]}
12 23121 213 123 hello ff
[caozx26@caozx26 ~]$ 

关联数组

一次赋单个值

bash 复制代码
[caozx26@caozx26 ~]$ declare -A a_array
[caozx26@caozx26 ~]$ declare -A books_array
[caozx26@caozx26 ~]$ declare -A books_ar
[caozx26@caozx26 ~]$ boos_ar[linux]=2
[caozx26@caozx26 ~]$ books_ar[linux]=2
[caozx26@caozx26 ~]$ books_ar[math]=3
[caozx26@caozx26 ~]$ echo ${books_ar[*]}
3 2
[caozx26@caozx26 ~]$ echo ${books_ar[*]}
3 2
[caozx26@caozx26 ~]$ echo ${books_ar[linux]}
2
[caozx26@caozx26 ~]$ echo ${#books_ar[*]}
2
[caozx26@caozx26 ~]$ echo ${!books_ar[*]}
math linux
[caozx26@caozx26 ~]$ 

一次赋多个值

bash 复制代码
[caozx26@caozx26 ~]$ names_ar=([name1]=js [n2]=ts [n]=ok)
[caozx26@caozx26 ~]$ echo ${names_ar[*]}
ok
[caozx26@caozx26 ~]$ echo ${names_ar[@]}
ok
[caozx26@caozx26 ~]$ echo ${!names_ar[@]}
0
[caozx26@caozx26 ~]$ declare -A names
[caozx26@caozx26 ~]$ names=([na1]=ts [n2]=js [n3]=oko)
[caozx26@caozx26 ~]$ echo ${names[@]}
js oko ts
[caozx26@caozx26 ~]$ echo ${!names[@]}
n2 n3 na1
[caozx26@caozx26 ~]$ echo ${#names[@]}
3
[caozx26@caozx26 ~]$ 

记录





bash 复制代码
[caozx26@caozx26 ~]$ /bin/bash
[caozx26@caozx26 ~]$ ls
公共  模板  视频  图片  文档  下载  音乐  桌面
[caozx26@caozx26 ~]$ echo $?
0
[caozx26@caozx26 ~]$ $$
bash: 3518: 未找到命令...
[caozx26@caozx26 ~]$ echo $$
3518
[caozx26@caozx26 ~]$ ps
    PID TTY          TIME CMD
   3478 pts/0    00:00:00 bash
   3518 pts/0    00:00:00 bash
   3586 pts/0    00:00:00 ps
[caozx26@caozx26 ~]$ kill -9 $$
已杀死
[caozx26@caozx26 ~]$ $!
[caozx26@caozx26 ~]$ sleep 200&
[1] 3615
[caozx26@caozx26 ~]$ echo $!
3615
[caozx26@caozx26 ~]$ ps
    PID TTY          TIME CMD
   3478 pts/0    00:00:00 bash
   3615 pts/0    00:00:00 sleep
   3628 pts/0    00:00:00 ps
[caozx26@caozx26 ~]$ ls -l
总用量 0
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 公共
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 模板
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 视频
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 图片
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 文档
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 下载
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 音乐
drwxr-xr-x. 2 caozx26 caozx26 6 9月  26 05:33 桌面
[caozx26@caozx26 ~]$ echo !$
echo -l
-l
[caozx26@caozx26 ~]$ !!
echo -l
-l
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""$# is:"" $#
echo "ok"
[caozx26@caozx26 ~]$ chmod +x 1.sh
[caozx26@caozx26 ~]$ ./1.sh 2 12  2
./1.sh: 第 1 行:read: `is:': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh 21 21 21 
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[1]+  已完成               sleep 200
[caozx26@caozx26 ~]$ echo $*

[caozx26@caozx26 ~]$ $@
[caozx26@caozx26 ~]$ echo $@

[caozx26@caozx26 ~]$ ./1.sh 213 23 32 213
./1.sh: 第 1 行:read: `4': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p ""\$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh
./1.sh: 第 1 行:read: `0': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat  1.sh
read -p ""\$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh 231 2312 23 
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ ./1.sh 213 213 213
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ echo $*

[caozx26@caozx26 ~]$ cat 1.sh
read -p ""\$#" is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh 213 23 213 2132
./1.sh: 第 1 行:read: `4': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ ./1.sh s da dsa 
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p "\$# is:" $#
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh sd asd asd 
./1.sh: 第 1 行:read: `3': 不是有效的标识符
ok
[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
read -p "$# is:" input
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh
0 is:we
ok
[caozx26@caozx26 ~]$ ./1.sh 213 213 213
3 is:^C[caozx26@caozx26 ~]$ vim 1.sh
[caozx26@caozx26 ~]$ cat 1.sh
echo $#
echo $*
echo $@
echo "ok"
[caozx26@caozx26 ~]$ ./1.sh asd sad f sssda d
5
asd sad f sssda d
asd sad f sssda d
ok
[caozx26@caozx26 ~]$ ./1.sh asd sad dd das sadd as
6
asd sad dd das sadd as
asd sad dd das sadd as
ok
[caozx26@caozx26 ~]$ vim 2.sh
[caozx26@caozx26 ~]$ cat 2.sh 
echo $0
echo $1
echo $2
echo $3
[caozx26@caozx26 ~]$ chmod +x 2.sh
[caozx26@caozx26 ~]$ ./2.sh sad dsad sda dasd
./2.sh
sad
dsad
sda
[caozx26@caozx26 ~]$ ?a=s
bash: ?a=s: 未找到命令...
[caozx26@caozx26 ~]$ "?a"=s
bash: ?a=s: 未找到命令...
[caozx26@caozx26 ~]$ "213a"=dsa
bash: 213a=dsa: 未找到命令...
[caozx26@caozx26 ~]$ D=" abc"
[caozx26@caozx26 ~]$ D= AS
bash: AS: 未找到命令...
相似命令是: 'as'
[caozx26@caozx26 ~]$ DA= SD
bash: SD: 未找到命令...
[caozx26@caozx26 ~]$ DA=" SDD"
[caozx26@caozx26 ~]$ DA="?SA"
[caozx26@caozx26 ~]$ DA=?21
[caozx26@caozx26 ~]$ "123"=A
bash: 123=A: 未找到命令...
[caozx26@caozx26 ~]$ A=date
[caozx26@caozx26 ~]$ a=date
[caozx26@caozx26 ~]$ a=`date`
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:31:53 CST
[caozx26@caozx26 ~]$ a=date
[caozx26@caozx26 ~]$ echo $a
date
[caozx26@caozx26 ~]$ a=$(date)
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:32:09 CST
[caozx26@caozx26 ~]$ array[0]=sa
[caozx26@caozx26 ~]$ array[1]=sd
[caozx26@caozx26 ~]$ echo $[array[*]]
bash: array[*]: 数组下标不正确
0
[caozx26@caozx26 ~]$ echo ${array[*]}
sa sd
[caozx26@caozx26 ~]$ echo ${array[1]}
sd
[caozx26@caozx26 ~]$ array1=(na,ma,da)
[caozx26@caozx26 ~]$ echo ${array1[0]}
na,ma,da
[caozx26@caozx26 ~]$ declare -r
declare -r BASHOPTS="checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -ar BASH_VERSINFO=([0]="4" [1]="4" [2]="19" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
declare -ir EUID="1000"
declare -ir PPID="3473"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="1000"
[caozx26@caozx26 ~]$ echo ${array[*]:1:1}
sd
[caozx26@caozx26 ~]$ echo ${array1[*]:1:1}

[caozx26@caozx26 ~]$ echo ${array1[*]:0:1}
na,ma,da
[caozx26@caozx26 ~]$ array2=(ss ssa sdsad asd)
[caozx26@caozx26 ~]$ echo ${array2[*]:2:1}
sdsad
[caozx26@caozx26 ~]$ echo ${!array2[*]}
0 1 2 3
[caozx26@caozx26 ~]$ echo ${#array2[*]}
4
[caozx26@caozx26 ~]$ array4=(`ls -l`)
[caozx26@caozx26 ~]$ echo array4
array4
[caozx26@caozx26 ~]$ echo $array4
总用量
[caozx26@caozx26 ~]$ ls -l
总用量 8
-rwxrwxr-x. 1 caozx26 caozx26 34 9月  26 06:24 1.sh
-rwxrwxr-x. 1 caozx26 caozx26 32 9月  26 06:28 2.sh
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 公共
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 模板
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 视频
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 图片
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 文档
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 下载
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 音乐
drwxr-xr-x. 2 caozx26 caozx26  6 9月  26 05:33 桌面
[caozx26@caozx26 ~]$ echo ${array4[@]}
总用量 8 -rwxrwxr-x. 1 caozx26 caozx26 34 9月 26 06:24 1.sh -rwxrwxr-x. 1 caozx26 caozx26 32 9月 26 06:28 2.sh drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 公共 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 模板 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 视频 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 图片 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 文档 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 下载 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 音乐 drwxr-xr-x. 2 caozx26 caozx26 6 9月 26 05:33 桌面
[caozx26@caozx26 ~]$ echo ${array4[1]}
8
[caozx26@caozx26 ~]$ array[6]=(12 23121 213 123 "hello" [21]=ff)
bash: array[6]: 无法将链表赋值给数组成员
[caozx26@caozx26 ~]$ array6=(12 23121 213 123 "hello" [21]=ff)
[caozx26@caozx26 ~]$ echo $array6
12
[caozx26@caozx26 ~]$ echo ${array6[@]}
12 23121 213 123 hello ff
[caozx26@caozx26 ~]$ declare -A a_array
[caozx26@caozx26 ~]$ declare -A books_array
[caozx26@caozx26 ~]$ declare -A books_ar
[caozx26@caozx26 ~]$ boos_ar[linux]=2
[caozx26@caozx26 ~]$ books_ar[linux]=2
[caozx26@caozx26 ~]$ books_ar[math]=3
[caozx26@caozx26 ~]$ echo ${books_ar[*]}
3 2
[caozx26@caozx26 ~]$ echo ${books_ar[*]}
3 2
[caozx26@caozx26 ~]$ echo ${books_ar[linux]}
2
[caozx26@caozx26 ~]$ echo ${#books_ar[*]}
2
[caozx26@caozx26 ~]$ echo ${!books_ar[*]}
math linux
[caozx26@caozx26 ~]$ names_ar=([name1]=js [n2]=ts [n]=ok)
[caozx26@caozx26 ~]$ echo ${names_ar[*]}
ok
[caozx26@caozx26 ~]$ echo ${names_ar[@]}
ok
[caozx26@caozx26 ~]$ echo ${!names_ar[@]}
0
[caozx26@caozx26 ~]$ declare -A names
[caozx26@caozx26 ~]$ names=([na1]=ts [n2]=js [n3]=oko)
[caozx26@caozx26 ~]$ echo ${names[@]}
js oko ts
[caozx26@caozx26 ~]$ echo ${!names[@]}
n2 n3 na1
[caozx26@caozx26 ~]$ echo ${#names[@]}
3
[caozx26@caozx26 ~]$ read -t 3 -p "input " name
input 213123[caozx26@caozx26 ~]$ echo $name

[caozx26@caozx26 ~]$ read -t -p "input:" name
bash: read: -p: 无效的超时声明
[caozx26@caozx26 ~]$ read -t 3 -p "input:" name
input:12321312
[caozx26@caozx26 ~]$ echo $name
12321312
[caozx26@caozx26 ~]$ echo -s -p "input:" pass
-s -p input: pass
[caozx26@caozx26 ~]$ echo -s -p "input:"  pass
-s -p input: pass
[caozx26@caozx26 ~]$ read -s -p "input:" pass
input:[caozx26@caozx26 ~]$ echo $pass
213
[caozx26@caozx26 ~]$ echo hell | A
bash: A: 未找到命令...
[caozx26@caozx26 ~]$ echo hell | read A
[caozx26@caozx26 ~]$ echo $a
2025年 09月 26日 星期五 06:32:09 CST
[caozx26@caozx26 ~]$ echo $A
date
[caozx26@caozx26 ~]$ read A B
hello sss
[caozx26@caozx26 ~]$ echo $A
hello
[caozx26@caozx26 ~]$ echo $B
sss
[caozx26@caozx26 ~]$ vim 1.txt
[caozx26@caozx26 ~]$ cat 1.txt
ss 123

[caozx26@caozx26 ~]$ read user pass <1.txt
[caozx26@caozx26 ~]$ echo $user 
ss
[caozx26@caozx26 ~]$ echo $pass
123
[caozx26@caozx26 ~]$ vim 2.txt
[caozx26@caozx26 ~]$ read us pass<2.txt
[caozx26@caozx26 ~]$ echo $us
dasd,123
[caozx26@caozx26 ~]$ echo $pass

[caozx26@caozx26 ~]$ pwd
/home/caozx26
[caozx26@caozx26 ~]$ ls
1.sh  1.txt  2.sh  2.txt  公共  模板  视频  图片  文档  下载  音乐  桌面
[caozx26@caozx26 ~]$ c=/home/caozx26/1.sh
[caozx26@caozx26 ~]$ direname $c
bash: direname: 未找到命令...
[caozx26@caozx26 ~]$ dirname $c
/home/caozx26
[caozx26@caozx26 ~]$ basename $c
1.sh
[caozx26@caozx26 ~]$ 
相关推荐
chen_note2 小时前
Keepalived两个集群实验
linux·服务器·数据库·keepalived·高可用集群
Akshsjsjenjd2 小时前
HAProxy 使用指南:从基础到实战部署
linux·负载均衡
東雪蓮☆3 小时前
ELK 企业级日志分析系统实战教程
linux·运维·elk
泽虞4 小时前
《C++程序设计》笔记p4
linux·开发语言·c++·笔记·算法
什么半岛铁盒4 小时前
C++项目:仿muduo库高并发服务器--------Any类的实现
linux·服务器·数据库·c++·mysql·github
吃不胖没烦恼4 小时前
Alibaba Cloud Linux 3 +Docker 部署 ThinkPHP6 (宝塔环境)
linux·运维·docker
骄傲的心别枯萎5 小时前
RV1126 NO.30:RV1126多线程获取音频AI的PCM数据
linux·ffmpeg·音视频·pcm·视频编解码
zz-zjx5 小时前
Apache 生产环境操作与 LAMP 搭建指南
linux·运维·apache
峰顶听歌的鲸鱼5 小时前
29.Linux防火墙管理
linux·运维·网络·笔记·学习方法